Как перейти на dockerfile, если база данных находится в другом контейнере? - PullRequest
0 голосов
/ 03 июля 2019

Такая ситуация: существует контейнер с дБ и контейнером Django приложения, который через ссылку соединяется с дБ и запускается сам:

FROM deb_base
COPY vfnd vfnd
CMD ["python", "./vfnd/manage.py", "runserver", "0.0.0.0:8001"]

Плохо то, что вам нужно запустить pythonvfnd / manage.py переносить вручную каждый раз, когда я запускаю контейнеры.

Пробовал следующий код:

FROM deb_base
COPY vfnd vfnd
RUN ["python", "./vfnd/manage.py", "migrate"]
CMD ["python", "./vfnd/manage.py", "runserver", "0.0.0.0:8001"]

Однако, когда вы пытаетесь создать образ, вы получаете сообщение об ошибкекоманда

Step 3/4 : RUN ["python","./vfnd/manage.py","migrate"]
 ---> Running in 5791de6fc147
Traceback (most recent call last):
  File "/usr/share/Python-3.7.3/lib/python3.7/site-packages/django/db/backends/b
ase/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/share/Python-3.7.3/lib/python3.7/site-packages/django/db/backends/b
ase/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/share/Python-3.7.3/lib/python3.7/site-packages/django/db/backends/p
ostgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/share/Python-3.7.3/lib/python3.7/site-packages/psycopg2/__init__.py
", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "pg_1" to address: Name
 or service not known

Как реализовать мою идею

1 Ответ

0 голосов
/ 03 июля 2019

Поместите эти команды в скрипт и запустите его как точку входа в dockerfile.

  • Создать init.sh скрипт с содержанием
#!/bin/bash

python /vfnd/manage.py migrate
python /vfnd/manage.py runserver 0.0.0.0:8001

exec "$@"
  • Измените dockerfile на
FROM deb_base
COPY vfnd /
COPY init.sh /init.sh
ENTRYPOINT ["/init.sh"]

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...