docker-compose.yml
を介して、アプリケーションを実行できます。ここで、アプリケーションを実稼働環境に移動しますが、コンテナデータベースは使用しません。 docker-compose
を使用してローカルのMySQLデータベースをアプリケーションに接続する方法はありますか?
私のdocker-compose.ymlは次のようになります。
version: '3'
services:
web-app:
build:
context: .
dockerfile: web-app/Dockerfile
ports:
- 8080:8080
links:
- app-db
app-db:
build:
context: .
dockerfile: app-db/Dockerfile
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=Optimize
ports:
- 3306:3306
app-db
部分の代わりに、ローカルにホストされているmysql
データベースに接続したいだけです。
DockerネットワークでホストマシンのIPを見つけます。 docker-compose.yml version: "3"
を使用する場合、おそらくそのIPは172.18.0.1
、ですが、確認するためにコンテナ(ホスト)の「ゲートウェイ」:
docker inspect <container-id-or-name> | grep Gateway
"Gateway": "",
"IPv6Gateway": "",
"Gateway": "172.18.0.1",
"IPv6Gateway": "",
Dockerアプリケーション内で、MySQLを次のようにポイントします:172.18.0.1:3306
(おそらく構成ファイル内)。 Dockerネットワークがまだ同じである限り、そのIPが固定されていることを考慮してください(ネットワークはdocker-composeによって作成され、docker-compose down
を実行しない限り削除されません)
また、MySQLがすべてのインターフェイスをリッスンしていることを確認してください。 my.cnf
でbind-address
である0.0.0.0
を検索します(サーバーにパブリックIPがある場合はセキュリティ上の問題を考慮してください)。
代替手段として、ローカルホストを共有するために、ホストと同じネットワークをコンテナに持ち込むことができます。これにより、コンテナはそこでmysqlを見つけます。ネットワークモードを「ホスト」として使用します。
version: '3'
services:
web-app:
build:
context: .
dockerfile: web-app/Dockerfile
ports:
- 8080:8080
network_mode: "Host"
次に、hibernate.properties
でmysqlを次のようにポイントします:localhost:3306