私は完全な開発スタックを構築するためにドッカ - コンを使用しています。docker-composeを使用してdockerコンテナを相互にリンクするときにIPアドレスを処理する方法は?
アプリケーションが動作するようにMySQLサーバを必要とします。
MySQLサーバは、ドッキングウィンドウ・コンによる外部コンテナの設定です:
mysql:
image: mysql:5.6
volumes:
- /data/mysql:/var/lib/mysql
- ./docker/mysql.d:/etc/mysql/conf.d
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
アプリケーションは、MySQLコンテナ独自のドッキングウィンドウ-compose.ymlと参照を持っている:
my-application:
build: . # the Dockerfile resides in the current folder
ports:
- "9180:80"
- "9543:443"
external_links:
- mysql_mysql_1:mysql
environment:
DOCKER_ENVIRONMENT: dev
DB_NAME: local_db
DB_PASS: password
DB_USER: root
DB_HOST: # how to set the mysql's IP address?
私は渡すことはできません彼らは動的であるので、ドッカーでそれらを作成します。
私は特定の変数が設定されているように、アプリケーションは、MySQLのIPアドレスを認識していることを知っている:
application-container$ env|grep ADDR
MYSQL_PORT_3306_TCP_ADDR=172.17.0.241
しかし、これは私の必要DB_HOST
ではありません。
は私がDB_HOST
に何とか変数をマッピングするか、別々にそれを設定することはできますか?
MySQLサーバが外部のドッキングウィンドウ-composer.ymlファイル上にあるのはなぜ?これは本当に必要ですか? あなたが一緒に実行する必要があるコンテナアプリケーションがある場合は通常、あなたが唯一のドッキングウィンドウ-composer.ymlに設定する必要があります。 – nessuno
@nessuno複数のプロジェクトにmysqlコンテナを使用したいと思います。私は12のmysqlサーバを飛ばす必要はありません。さらに、私はmysqlデータを '/ data/mysql'にある大きなHDDにマップしています。これはmysqlデータベースが非常に大量になる可能性があるためです。複数のmysqlインスタンスが同じフォルダにマップされていると、ファイルシステムのロックの問題が発生します。 – k0pernikus
あなたのアプリケーションと共にmysqlコンテナの設定を行うことができます。ちょうど '--no-recreate'フラグをつけてdocker-composeを実行すればよいと思います。 その後、mysqlコンテナは1つしかありません。その名前を使用してdocker-compose.ymlファイルでそのコンテナを直接参照することができます。したがって、 'DB_HOST:mysql'を作成してください。 – nessuno