Använd bara användardefinierade bryggnätverk. Först, utnyttja dina kunskaper genom att läsa en kort förklaring av olika typer av nätverk i Docker:https://docs.docker.com/network/bridge/
För det andra, definiera ditt eget nätverk
docker network create foo
Kör sedan dina behållare anslutna till detta nätverk:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Observera i båda kommandona --network foo
. Du behöver inte heller för att exponera portar i detta fall - i användardefinierade nätverk görs det automatiskt:
Behållare anslutna till samma användardefinierade bryggnätverk exponerar automatiskt alla portar för varandra, och inga portar för omvärlden. Detta gör att applikationer i containers kan kommunicera med varandra enkelt, utan att oavsiktligt öppna åtkomst till omvärlden.
För det tredje, ge dina behållare mänskliga läsbara värdnamn med --name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
Och slutligen fixa anslutningssträngen - ändra från localhost
till containernamn, som my-postgres
:
...
POSTGRES_HOST=my-postgres
...