2つのドッカーコンテナを--net = hostオプションで実行しているので、ネットワーキングが透過的です(ドッキングコンテナーはホストと同じネットワーキングデバイスを使用します)。Docker:ホストの--net = hostオプションを使用してdockerコンテナのmysqlにアクセスします。
docker network inspect host
[
{
"Name": "host",
"Id": "32ddf8f58d520e49a0b3f296d6d03134b24d7c503309e1c35e04c248010aa64b",
"Scope": "local",
"Driver": "host",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Containers": {
"0e41eb0b07d2751db99a204a3a69a2446bf5b869150bc5741df670e56dbce670": {
"Name": "sleepy_goldstine",
"EndpointID": "cc8f2c4da055ae7e608c127552f67753c319aeb603234c418a0ebe8958c1025a",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
},
"71de826121e7222020eec8be8b3a737f3297f8c3aa99d21f0f7016d6aca6f668": {
"Name": "tender_goodall",
"EndpointID": "2da0468dbaf1e6b877984cbeb6b2a775786259fec7e83eb373c1d25fe715e16f",
"MacAddress": "",
"IPv4Address": "",
"IPv6Address": ""
}
},
"Options": {}
}
]
外部からのドッキング用のコンテナ内のサーバーサービスにアクセスできます。しかし、動作しないものがあり、その上にはさみで走り始めています...
ドッカーホストには、ポート3306で動作するmysqlデータベースがあります。問題はありません。
ドッカー容器1は、同様に、ポート3307上で実行されているとドッカー容器2は
のMySQL -P 3307 -uユーザ-p DBNAMEに
を使用して、しかし、ポート3308
上で実行されているmysqldのたmysqldのました私はホストからmysqlデータベースにアクセスできません。最初のドッカーインスタンスでmysqlを実行するためのポートを提供しても、常にホスト上のmysqlデータベースに送られます。このような動作につながるiptablesルールはありません。ファイアウォールをオフにしても、動作は変わりません。
my.cnfでは、mysqlサーバが0.0.0.0(127.0.0.1)にバインドされていても動作しません。
私は迷子になり、誰かが解決策を見て欲しいと願っています。 --host = netオプションを削除してポートエクスポージャーを操作することはオプションではありません。これは、コンテナへのネットワークのパフォーマンスを低下させるためです。
編集:ドッカーコンテナ内のデータベースがアクセス可能であり、設計どおりに動作することを忘れてしまった。 Dockerコンテナからのポートを使用していても、接続が常にホスト - >ホストに向けられるため、ホスト - >ドッカーからの接続は動作しません。
あなたは私のヒーローです!解決済み! – Blacksheep
@Blacksheep私はそれを助けてくれてうれしいです:-)私はこの問題を何度もlocalhostへのMySQLポートをトンネリングすることで何度も経験しました。 'localhost'を指定しても動作しないことに注意してください。より期待された方法で動作するようにMySQLクライアントを設定する方法については、[質問](http://serverfault.com/q/337818/226737)を参照してください。関連する[MySQLのバグ](https://bugs.mysql.com/bug.php?id=31577)です。 – saaj