Просто използвайте дефинирана от потребителя мостова мрежа. Първо, използвайте знанията си, като прочетете кратко обяснение на различните типове мрежи в Docker:https://docs.docker.com/network/bridge/
Второ, дефинирайте своя собствена мрежа
docker network create foo
След това стартирайте контейнерите си свързани към тази мрежа:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Забележете и в двете команди --network foo
. Също така, не трябва за да разкриете портове в този случай - вътре в потребителски дефинирани мрежи това се прави автоматично:
Контейнерите, свързани към една и съща дефинирана от потребителя мостова мрежа, автоматично излагат всички портове един на друг и никакви портове към външния свят. Това позволява на приложенията в контейнери да комуникират лесно помежду си, без случайно отваряне на достъп до външния свят.
Трето, дайте на вашите контейнери четими от човека имена на хостове с --name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
И накрая коригирайте низа за свързване - променете от localhost
към името на контейнера, като my-postgres
:
...
POSTGRES_HOST=my-postgres
...