docker-composeは、デフォルトで仮想ネットワークを作成します。これは、composeファイル内のすべてのコンテナー/サービスがIPアドレスによって相互に到達できる場合です。 links
を使用する 、depends_on
または、ホスト名で相互に到達できるネットワークエイリアス。あなたの場合、ホスト名はサービス名ですが、これはオーバーライドできます。 (docs
を参照してください。 )
my_common_package
のスクリプト 次に、コンテナ/サービスはmysql
に接続する必要があります ポート3306
設定に応じて。 (localhost
ではありません ポート3306
)
expose
を使用することにも注意してください サービスのDockerfileにEXPOSE
がない場合にのみ必要です 声明。標準のmysqlイメージはすでにこれを行っています。
コンテナポートをlocalhost
にマップする場合 ports
を使用する必要があります 、ただし、必要な場合にのみこれを行ってください。
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"
ここでは、mysqlコンテナのポート3306をポート3306のローカルホストにマップする必要があると言っています。
これで、localhost:3306
を使用してmysqlに接続できます。 Dockerの外。たとえば、testsql.py
を実行してみることができます ローカル(コンテナ内ではありません)。
コンテナ間の通信は、常に各コンテナのホスト名を使用して行われます。コンテナを仮想マシンと考えてください。
docker network list
を使用して作成されたネットワークdocker-composeを見つけることもできます。 :
1b1a54630639 myproject_default bridge local
82498fd930bb bridge bridge local
..次に、docker network inspect <id>
を使用します 詳細を確認します。
コンテナに割り当てられたIPアドレスはかなりランダムである可能性があるため、コンテナ間通信の唯一の実行可能な方法はホスト名を使用することです。