docker-compose ve výchozím nastavení vytvoří virtuální síť, kde se všechny kontejnery/služby v souboru skládání mohou navzájem spojit pomocí IP adresy. Pomocí links
, depends_on
nebo síťových aliasů, které se mohou navzájem kontaktovat podle názvu hostitele. Ve vašem případě je název hostitele název služby, ale lze jej přepsat. (viz:dokumenty
)
Váš skript v my_common_package
kontejner/služba by se pak měla připojit k mysql
na portu 3306
podle vašeho nastavení. (nikoli localhost
na portu 3306
)
Všimněte si také, že pomocí expose
je nutné pouze v případě, že Dockerfile pro službu nemá EXPOSE
prohlášení. Standardní mysql obrázek to již dělá.
Pokud chcete namapovat port kontejneru na localhost
musíte použít ports
, ale udělejte to pouze v případě, že je to nutné.
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"
Zde říkáme, že port 3306 v kontejneru mysql by měl být mapován na localhost na portu 3306.
Nyní se můžete připojit k mysql pomocí localhost:3306
mimo docker. Můžete například zkusit spustit svůj testsql.py
lokálně (NE v kontejneru).
Komunikace mezi kontejnery bude vždy probíhat pomocí názvu hostitele každého kontejneru. Představte si kontejnery jako virtuální stroje.
Můžete dokonce najít síťový docker-compose vytvořený pomocí docker network list
:
1b1a54630639 myproject_default bridge local
82498fd930bb bridge bridge local
.. pak použijte docker network inspect <id>
podívat se na podrobnosti.
Přidělované IP adresy kontejnerům mohou být docela náhodné, takže jediný schůdný způsob komunikace mezi kontejnery je použití názvů hostitelů.