Контейнер будет доступен снаружи Docker, только если у него есть опубликованные порты. Поэтому вам необходимо удалить параметр -p
из контейнера базы данных.
Чтобы два контейнера могли общаться друг с другом, они должны находиться в одной сети . Docker по умолчанию здесь для совместимости с тем, что сейчас является очень старой сетевой настройкой, поэтому вам нужно вручную создать сеть, хотя для этого не нужно никаких специальных настроек.
Наконец, вы не делаете нужно --net host
. Это отключает все настройки сети Docker; сопоставления портов с -p
отключены, и вы не можете общаться с контейнерами, у которых сами порты не опубликованы. (Обычно я рекомендую как хак для работы с жестко закодированными localhost
строками соединения.)
В результате ваша окончательная настройка будет выглядеть так:
sudo docker build -t toolname .
sudo docker network create tool
sudo docker run -d --net=tool --name=toolname-db mdillon/postgis
sudo docker run -d --net=tool -p 4444:4444 --name=toolname-api toolname
Как @BentCoder предлагает в комментарий, очень часто используется Docker Compose для запуска нескольких контейнеров вместе. Если вы это сделаете, создаст для вас сеть , которая может сэкономить вам шаг.