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アドレスはかなりランダムである可能性があるため、コンテナ間通信の唯一の実行可能な方法はホスト名を使用することです。