Я пытаюсь, чтобы один контейнер докеров общался с Postgres в другом контейнере, используя композицию докеров.
Вот мой компоновочный файл:
version: '2'
services:
web:
restart: always
build: cloudpebble/
ports:
- "8090:8090"
volumes:
- "./cloudpebble/:/code"
links:
- redis
- postgres:postgres
- s3
- qemu
- ycmd
depends_on:
- postgres
environment:
- DEBUG = "yes"
- RUN_WEB = "yes"
- AWS_ENABLED = "yes"
- PORT=8090
- AWS_S3_FAKE_S3=10.0.0.4:8003
- MEDIA_URL=http://10.0.0.4:8003/builds.cloudpebble.net/
- QEMU_URLS=http://10.0.0.4:8001/
- YCM_URLS=http://10.0.0.4:8002/
- PUBLIC_URL=http://10.0.0.4:8090/
- LIBPEBBLE_PROXY=wss://cloudpebble-ws.herokuapp.com/tool
- PEBBLE_AUTH_URL=https://auth.rebble.io
networks:
- dbnet
celery:
build: cloudpebble/
volumes:
- "./cloudpebble/:/code"
links:
- redis
- postgres
- s3
environment:
- DEBUG = "yes"
- RUN_CELERY = "yes"
- AWS_ENABLED=yes
- EXPORT_ROOT=http://10.0.0.4/export.cloudpebble.net/
- AWS_S3_FAKE_S3=10.0.0.4:8003
qemu:
build: cloudpebble-qemu-controller/
volumes:
- "./cloudpebble-qemu-controller/:/code"
ports:
- "8001:80"
ycmd:
build: cloudpebble-ycmd-proxy/
volumes:
- "./cloudpebble-ycmd-proxy/:/code"
ports:
- "8002:80"
redis:
image: redis
postgres:
image: postgres
ports:
- "5432:5432"
networks:
- dbnet
container_name: postgres
s3:
image: kuracloud/fake-s3
ports:
- "8003:4569"
networks:
default:
name: pebble
dbnet:
driver: bridge
Проблема в том, что хотя обе сети созданы, «веб-контейнер» не видит Postgres и выдает эту ошибку: could not translate host name "postgres" to address: Name or service not known
Спасибо!
Я пробовал следующее:
web
У вас есть две отдельные сети, но в этом нет необходимости. Контейнер базы данных изолирован сам по себе dbnet
, но ни один из других контейнеров не изолирован. Для подключения двух контейнеров либо ни один контейнер не может иметь блок networks:
, либо оба имеют и содержат хотя бы одно общее сетевое имя, либо только один имеет, но явно содержит default
.
Самое простое решение здесь — просто использовать предоставленную Compose сеть default
для всего. Удалите все блоки networks:
во всем файле. Параметры links:
устарели, а активируемый ими архаичный сетевой режим может иногда вызывать проблемы; удалите их (или, возможно, измените их на `depends_on:).
Ах! Только что исправил это. Оказывается, переменная среды для пароля БД не устанавливалась должным образом. Спасибо!
Хорошо, сделал это. Тем не менее, я все еще получаю ту же ошибку. На этот раз он сказал, что создал сеть по умолчанию. Я также изменил все ссылки на depend_on.