Как и везде в Docker, 127.0.0.1 обычно означает «этот контейнер».Различные упоминания host
в вашем файле docker-compose.yml
фактически создают NAT-сеть мостового типа, которая называется «host»;он не включает сетевой режим хоста.При этом режим сетевого хоста обычно не нужен, поэтому давайте сделаем это правильно:
Прежде всего, Docker Compose самостоятельно создаст частную сеть мостового типа для каждого отдельного файла docker-compose.yml
,так что вам здесь вообще не нужны блоки networks:
.Поскольку он делает это, имена сервисных блоков web
и mongodb
будут действительными именами хостов для одного контейнера для достижения другого.
В службе web:
вы заменяете ее команду наcurl
команда.Как только эта команда завершится, служба завершит работу, что почти наверняка не то, что вам нужно.Вы не включили соответствующий Dockerfile
, но я предполагаю, что он заканчивается строкой вроде CMD ["npm", "start"]
, которая дает более полезную команду по умолчанию.Объявления томов также немного странны: наличие томов для хранения кода не является типичным случаем использования, и вы обычно COPY
(встроенное) дерево приложений в изображении в Dockerfile
.(Использование томов для хранения постоянных данных и ввода конфигурационных файлов, как у вас для службы mongodb:
, очень разумно.)
Вам также не нужно явно устанавливать container_name:
или hostname:
отдельных контейнеров, за исключением действительно необычных обстоятельств.
Если удалить это и исправить имя хоста, мы должны получить:
version: '3'
services:
web:
build: ./rqiim
environment:
- MONGO_HOSTNAME=mongodb
ports:
- "8080:8080"
mongodb:
image: mongo:3.4.18-jessie
volumes:
- /data/db:/data/db
- ./mongo:/etc/mongo
command: --config /etc/mongo/mongod.conf
ports:
- "27017:27017"