私の仕事では、Dockerと、_--net=Host
_オプションを使用して、Dockerコンテナーポートをマシンに転送するチャームのように機能しています。これにより、例として特定のポートを使用する不快なタスクを追加できます。
MacでDockerを使い始めたとき、私が最初に抱えていた問題は、オプション--net=Host
が機能しなくなったことです。私は調査しましたが、これが不可能である理由(MacのDockerは独自の仮想マシンで実行されます)と私の一時的な解決策は、ポートを公開するために-p
オプションを使用することですが、この制限により、さらに多くのタスクを追加できます公開する必要があるポートごとに明示的な-p
コマンドを実行する必要があるため、ポートを使用します。
これと同じ問題を抱えている人は?これにどう対処するか?
あなたの問題はおそらくあなたがdockertoolboxまたはdhingy/dliteを使用しているか、または本格的なLinux VMを提供する他のものを使用していて、DockerをホストしてこのVM内のコンテナ。これは、VMにはもちろん、独自のネットワークスタックと独自のIPがホスト上にあり、ツールで問題が発生するということです。コンテナの公開されたポートはOSX Host localhost
、むしろOSX Docker-VM-ip
。
これらの問題をエレガントに解決するには
localhost
にポートを公開するdocker run -p 3306:3306 percona
を実行すると、3306がosx-Host-localhost
にバインドされます。したがって、localhost:3306にアタッチしようとする他のすべてのosx-toolは、慣れているように機能します(非常に便利) brew install mysql
または同様にmysqlをインストール特に何もエクスポートせず、すべてのコンテナ(OSX-Host-localhostのすべてのポート)から全体としてアクセス可能にする
OSXホストで提供したポートにattachしたい場合は、コンテナ内から、例えばxdebugセッション中、IDE listens on port 9000on the OSX-Host-localhostand the container running FPM/PHPは、Macでこのosx-localhost:9000にattachする必要があります。これを行う必要があります: https://Gist.github .com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c
したがって、ダミーのループバックIPを作成し、10.254.254.254:9000を使用してコンテナーなしでOSXホストポートにアクセスできるようにします。これは移植可能であり、基本的に、これまでのように開発に必要なすべてを提供します
そのため、Macで実行されており、localhost:portに接続しようとするアプリへのコンテナー公開ポートへの接続を提供します
そして2番目の逆は、コンテナー内の何かがホストのポートに接続したい場合です。
「 コンテナポートをホストにバインドする 」で説明されている1つの回避策は、-P
を使用することです。
(または
--publish-all=true|false
)をdocker run
に変更すると、イメージのDockerfileのEXPOSE
行または--expose <port>
コマンドラインですべてのポートが識別されます。フラグを立てて、エフェメラルポート範囲内のいずれかのホストポートにマッピングします。docker port
コマンドを使用して、作成されたマッピングを検査する必要があります。
したがって、アプリがdocker port <CONTAINER>
を使用してマッピングされたポートを取得できる場合は、必要な数のコンテナーを追加して、マッピングされたポートをそのように取得できます(「各ポートに明示的な-p
コマンド」は必要ありません)。 。
Mac用のドッカーが後で双方向接続をサポートできるかどうか不明 https://forums.docker.com/t/will-docker-for-mac-support-bi-directional-connection-between-Host-and -container-in-the-future/19871
私には2つの解決策があります: