#node.js #mongodb #docker #docker-compose
Вопрос:
У меня есть следующий файл docker-compose, который я пытаюсь создать в сети хоста. Сборка прошла успешно, но я не вижу никакого результата после сборки.
version: "3.3"
services:
mycontainer_3000:
container_name: mycontainer_3000
build:
context: src/mycontainer_3000
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3000:latest
restart: unless-stopped
network_mode: host
volumes:
- "./src/mycontainer_3000:/usr/src/app"
depends_on:
- mycontainer_3001
mycontainer_3001:
container_name: mycontainer_3001
build:
context: src/mycontainer_3001
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3001:latest
volumes:
- "./src/mycontainer_3001:/usr/src/app"
depends_on:
- mongo
mycontainer_3003:
container_name: mycontainer_3003
build:
context: src/mycontainer_3003
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3003:latest
network_mode: host
volumes:
- "./src/mycontainer_3003:/usr/src/app"
depends_on:
- mongo
mycontainer_3002:
container_name: mycontainer_3002
build:
context: src/mycontainer_3002
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3002:latest
network_mode: host
volumes:
- "./src/mycontainer_3002:/usr/src/app"
mongo:
image: mongo
restart: always
network_mode: host
volumes:
- "./db/:/data/db"
mongo-express:
image: mongo-express
restart: always
network_mode: host
environment:
ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/
Когда я компилирую с помощью docker-compose up
, все контейнеры успешно создаются.
Но когда я пытаюсь получить доступ к любому из контейнеров, используя http://localhost:3000 или любой другой порт, он показывает, что на этом порту ничего не работает!
Комментарии:
1. Вам почти никогда не понадобится сеть хоста, и она не работает на хостах, отличных от Linux, или если Docker иным образом работает на виртуальной машине. Какова ваша хост-система? Если ваши службы прослушивают отдельные порты, можете ли вы вместо этого использовать настройку Compose, например
ports: ['3000:3000']
?2. Я использую Docker для рабочего стола. Ошибка заключается в следующем :
ERROR: for mycontainer_3002 "host" network_mode is incompatible with port_bindings
3. Если вы используете рабочий стол Docker, сеть хоста, вероятно, работает не так, как вы ожидаете. Удалите эту
network_mode: host
опцию.
Ответ №1:
Попробуйте добавить ports
, чтобы явно раскрыть их
version: "3.3"
services:
mycontainer_3000:
container_name: mycontainer_3000
build:
context: src/mycontainer_3000
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3000:latest
restart: unless-stopped
network_mode: host
#HERE
ports: '3000:3000'
volumes:
- "./src/mycontainer_3000:/usr/src/app"
depends_on:
- mycontainer_3001
mycontainer_3001:
container_name: mycontainer_3001
build:
context: src/mycontainer_3001
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3001:latest
#HERE
ports: '3001:3001'
volumes:
- "./src/mycontainer_3001:/usr/src/app"
depends_on:
- mongo
mycontainer_3003:
container_name: mycontainer_3003
build:
context: src/mycontainer_3003
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3003:latest
network_mode: host
#HERE
ports: '3003:3003'
volumes:
- "./src/mycontainer_3003:/usr/src/app"
depends_on:
- mongo
mycontainer_3002:
container_name: mycontainer_3002
build:
context: src/mycontainer_3002
dockerfile: ./../../Dockerfile.dev
args:
- T_ENV
image: myproject/mycontainer_3002:latest
network_mode: host
#HERE
ports: '3002:3002'
volumes:
- "./src/mycontainer_3002:/usr/src/app"
mongo:
image: mongo
restart: always
network_mode: host
#HERE
ports: '27017:27017'
volumes:
- "./db/:/data/db"
mongo-express:
image: mongo-express
restart: always
network_mode: host
#HERE
ports: '8080:8080'
environment:
ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/
Комментарии:
1. Попытка сделать это приводит к ошибке :
services.mycontainer_3000.ports contains an invalid type, it should be an array
И если я предоставлю его в массиве :ERROR: for mycontainer_3002 "host" network_mode is incompatible with port_bindings
2. Я обновил содержимое YML, проверьте, работает ли оно сейчас. Я изменил номера портов на строки