docker-compose не может создать веб-компонент, поскольку он не может подключиться к ранее созданному компоненту db
Mac OSX 10.13.6, conda 4.5.11, Python 3.6.8, Docker версия 18.09.1,docker-compose версия 1.23.2
django 1.8.3 устанавливается вместе с файл require.txt из Dockerfile.Не свободен в обновлении.
Несколько очень похожих обсуждений по SO не помогли (как этот: Docker-compose с django не смог перевести имя хоста "db" в адрес: имя или служба неизвестна).
У меня есть docker-compose.yml
с сетью и двумя компонентами:
version: '3'
networks:
bridge:
driver: bridge
services:
db:
image: postgres:10
container_name: myapp-db
volumes:
- ./postgres_data:/var/lib/postgresql/data/
ports:
- "5432:5432"
environment:
POSTGRES_DB: actionability-master
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
networks:
- bridge
web:
restart: unless-stopped
container_name: myapp-web
build: .
command: /start_gunicorn.sh
ports:
- "8080:8080"
environment:
PRODUCTION: 'true'
networks:
- bridge
В моем settings.py
У меня есть раздел БАЗ ДАННЫХ:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': INSTANCE_NAME,
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': '5432'
},
}
Когда я запускаю $ docker-compose up -d
, создается первое изображение (дБ) и запускается его контейнер.Можно увидеть, что он работает и прослушивает порт 5432 с docker ps
и lsof
.То же самое происходит, если я удаляю web:
компонент из docker-compose.yml
file
Теперь у второго компонента (web) есть Dockerfile, который содержит эти две строки (среди многих других):
RUN python manage.py makemigrations myapp
RUN python manage.py migrate
"мигрировать" как умирает с этой ошибкой:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 130, in ensure_connection
self.connect()
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 119, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 176, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running on host "db" (37.34.32.51) and accepting TCP/IP connections on port 5432?
Я устал от нескольких твиков.* изменено version '3.7'
* добавлено в раздел БД
expose:
- "5432"
- добавлено в веб-компонент:
depends_on:
- "db"
- добавлено ввеб-компонент:
links:
- "db"
- установить для PRODUCTION значение false
environment:
PRODUCTION: 'false'
- измененоHOST в
settings.py
для имени контейнера, имени изображения, тегов, идентификатора контейнера, «localhost», «127.0.0.1» и т. Д. Ошибка та же, просто упоминание нового имени HOST вместо 'db ' - побежал за пределы conda env
- побежал с переключателем
--build
(docker-compose up -d --build
) - did
docker system prune
и снова побежал
Все та же ошибка.
ОБНОВЛЕНИЕ: После предложения, что это docker-compose не работает таким образом, я попытался разделить его на две отдельные задачи.Сначала я создаю контейнер myapp-db и проверяю, что он работает на правильном порту:
$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c110e8361cda postgres:10 "docker-entrypoint.s…" 4 hours ago Up 4 hours 0.0.0.0:5432->5432/tcp myapp-db
Затем я собираю myapp-web:
docker build -t myapp-web .
По-прежнему происходит та же ошибка.Итак, почему он не находит контейнер БД СЕЙЧАС?