docker-compose vil som standard oprette virtuelt netværk, hvor alle containere/tjenester i compose-filen kan nå hinanden via en IP-adresse. Ved at bruge links
, depends_on
eller netværksaliaser, de kan nå hinanden via værtsnavn. I dit tilfælde er værtsnavnet tjenestenavnet, men dette kan tilsidesættes. (se:dokumenter
)
Dit script i my_common_package
container/tjeneste skal derefter oprette forbindelse til mysql
på port 3306
i henhold til din opsætning. (ikke localhost
på port 3306
)
Bemærk også, at du bruger expose
er kun nødvendig, hvis Dockerfilen til tjenesten ikke har en EXPOSE
udmelding. Standard mysql-billedet gør allerede dette.
Hvis du ønsker at tilknytte en containerport til localhost
du skal bruge ports
, men gør kun dette, hvis det er nødvendigt.
services:
mysql:
image: mysql:5.6
container_name: test_mysql_container
environment:
- MYSQL_ROOT_PASSWORD=test
- MYSQL_DATABASE=My_Database
- MYSQL_USER=my_user
- MYSQL_PASSWORD=my_password
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
Her siger vi, at port 3306 i mysql-beholderen skal tilknyttes localhost på port 3306.
Nu kan du oprette forbindelse til mysql ved hjælp af localhost:3306
uden for docker. For eksempel kan du prøve at køre din testsql.py
lokalt (IKKE i en container).
Container til container kommunikation vil altid ske ved hjælp af værtsnavnet på hver container. Tænk på containere som virtuelle maskiner.
Du kan endda finde netværkets docker-compose oprettet ved hjælp af docker network list
:
1b1a54630639 myproject_default bridge local
82498fd930bb bridge bridge local
.. brug derefter docker network inspect <id>
at se på detaljerne.
Tildelte IP-adresser til containere kan være ret tilfældige, så den eneste brugbare måde for container til container-kommunikation er at bruge værtsnavne.