背景: 以前、コンテナ内のホストが提供する Redis サービスにアクセスする必要があるプロジェクトを実行したことがあります (これは一般的なアプリケーション シナリオです)。従来のソリューションは次のとおりです。 ① ホストネットワーク( ②
特別な操作は必要ありません。一般的な ② ブリッジ モードを使用するだけです。 ステップ1: ブリッジをカスタマイズして適用する docker ネットワーク作成 --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_bridge docker run --network=app_bridge --name ...... # 以下は docker-compose.yml ファイルから取得したものです...... ネットワーク: デフォルト: 名前: app_bridge 外部: 真 デフォルトの docker0 ブリッジを使用しないのはなぜですか? この記事の冒頭で述べたように、docker0はデフォルトのブリッジであり、新しく作成されたコンテナはデフォルトでこのブリッジに参加するため、このプログラム専用のブリッジapp_bridgeを作成する必要があります。 ステップ2: コンテナ内のホストに対応するエイリアスを作成する コンテナ内でブリッジ モードでホスト マシンの localhost:6379 サービスにアクセスするには、Docker が提供する --add-host オプションを使用する必要があります (docker-compose.yml 内の対応する構成は extra_host です)。 docker run の --add-host オプションは、コンテナの /etc/hosts ファイルに行を追加し、その名前を使用して他のネットワークにアクセスしやすくなります。 docker run -it --add-host dockerhost:172.16.1.1 ubuntu cat /etc/hosts 172.17.0.22 09d03f76bf2c fe00::0 ip6-ローカルネット ff00::0 ip6-mcastプレフィックス ff02::1 ip6-全ノード ff02::2 ip6-オールルーター 127.0.0.1 ローカルホスト ::1 ローカルホスト ip6-ローカルホスト ip6-ループバック 172.16.1.1 ドッカーホスト 次に、プログラム構成ファイルで dockerhost:6379 を使用して、ホスト Redis サービスにアクセスできます。 ------------------------------------------ docker ネットワーク モデルに少し詳しい友人であれば、上記の操作を理解して完了できるはずです----------------------------------------------------- 状況: 上記の操作を社内の CentOS7 マシンで実行したところ、コンテナがホストマシンに接続できなくなりました(コンテナ同士は正常にアクセスできました)。 問題のテストを簡素化します。新しいコンテナを作成し、コンテナ内の docker0 ゲートウェイに ping を試みます。なんと、会社の 4 台のマシンすべてが docker0 ゲートウェイに ping できませんが、外部ネットワークは正常にアクセスできます。 すると、次のような問題が発生します。デフォルトの docker0 ブリッジを使用すると、コンテナ内から docker0 ゲートウェイに ping できず、ホスト マシンにアクセスできなくなります。 ああ、それはおそらく会社のマシンの設定の問題でしょう。 。 〜 同社の運用・保守担当者に尋ねたところ、次のことがわかりました。 チェーン INPUT (ポリシー DROP) 上記の INPUT チェーンのデフォルト ポリシーは破棄です。コンテナーからホストにアクセスするための INPUT チェーン ルールは、リストされているもののいずれにも一致しないため破棄されるため、コンテナーから docker0 ゲートウェイに ping を実行してもスタックし、結果が返されません。
この戦略の本来の目的は、サーバーのセキュリティです (残念ながら、コンテナはホスト マシンにアクセスする基本的な機能を失ってしまいます!!!)。 運用・保守ソリューション: ① ②使用するブリッジネットワークセグメントをINPUTチェーンに追加する
OK、これですべてです。会社のネットワーク内のデフォルトのブリッジ コンテナー内のブリッジ ゲートウェイに ping できず、ホスト マシンにアクセスできないという問題が発生した場合は、この記事を参照してトラブルシューティングしてください。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: js を使用してファイルが UTF-8 でエンコードされているかどうかを判断する方法
Linux で MySQL-5.7.19 バージョンをインストールするための最初のチュートリアル。す...
docker における実行と開始の違いDocker run はミラーイメージを指定します。そしてdo...
目次序文仮想DOM仮想DOMとは仮想DOMの利点レンダリング関数とは何ですか? jsx Vue3 で...
この間、私は docker を勉強していたのですが、nginx をデプロイするときに行き詰まりました...
ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...
目次1. 例2. 兵士100人を作成する3. 質問4. 改善点5. エレガント? 6. JSの父から...
MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...
この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...
1. まず本文にulタグを追加します <!-- 順序なしリスト --> <ul i...
目次序文準備行く!文章プロセスを開始するメインループまとめ要約する序文準備皆さんは、こんなことを考え...
1.ダウンロードしてインストールする公式ウェブサイトからコミュニティ エディションの dmg インス...
まず、MySQLをskip-grant-tablesモードで起動します: mysqld --skip...
1. 実装のアイデアインターフェース署名の目的は、リクエストパラメータが改ざんされていないか、リクエ...
mysql ダーティページWAL メカニズムにより、InnoDB はステートメントを更新するときに、...
目次概要1. スタックとヒープ2. 変数オブジェクトと基本データ型3. 参照データ型とヒープメモリメ...