ホームページ > 運用・保守 > Docker > docker がホストに ping できない場合はどうすればよいですか?

docker がホストに ping できない場合はどうすればよいですか?

藏色散人
リリース: 2022-01-04 16:59:03
オリジナル
13122 人が閲覧しました

Docker がホストに ping できない問題の解決策: 1. daemon.json を変更します; 2. ファイアウォールをオフにします; 3. sysctl.conf を変更します; 4. ネットワーク ブリッジをリセットします。

docker がホストに ping できない場合はどうすればよいですか?

この記事の動作環境: ubuntu16.04 システム、Docker 20.10.11、Dell G3 コンピューター。

#Docker がホストに ping できない場合はどうすればよいですか?

Docker ブリッジ モードでホストに ping できない

問題の説明:

Dockerネットワークモードは4種類に分かれており、通常、設定しない場合はデフォルトでbridgeシングル ブリッジ モードの場合、コンテナーは独立した network Namespace を使用し、docker0 仮想ネットワーク カードに接続されます。 docker0 ブリッジおよび Iptables nat テーブル構成を介してホストと通信します。 この時点で、要塞マシンでテストし、
busybox を使用してテストします:

# 拉取镜像
docker pull busybox
# 运行容器
docker run -itd --name busy_bridge busybox
ログイン後にコピー
指示

docker network Inspection Bridge ネットワークを確認します:
docker がホストに ping できない場合はどうすればよいですか?## ネットワーク構成は成功しました。コンテナ内に移動して、

ip

を確認します。ip が割り当てられていることがわかりますが、 ping外部ネットワークに ping を実行すると失敗し、外部ネットワークに接続できません:
docker がホストに ping できない場合はどうすればよいですか? しかし、同じテストをローカルまたは Alibaba Cloud で実行すると、ネットワークに接続できることがわかります。何が問題ですか?

問題分析:

インターネットで情報を見つけた後、多くの人は

docker

を再起動すると接続できるようになります。通常、これは特定の構成が変更され、その後、再起動は機能しますが、ここでは効果がありません。一般に、変更にはいくつかの種類があります。以下で 1 つずつ試してみてください:

    Modify
  1. daemon.json
  2. ブリッジによって割り当てられたネットワーク セグメントがホストと競合するため、コンテナはホストにアクセスできません。割り当てを指定するには、
daemon.json

を変更する必要があります。コマンド vim /etc/ を使用してください。 docker/daemon.jsonを入力後に追加: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">{&quot;bip&quot;:&quot;172.16.10.1/24&quot;}</pre><div class="contentsignin">ログイン後にコピー</div></div>

docker

を再起動してコンテナを作成するとアクセスできますが、の間にはまったく競合がありませんip は元の要塞ホストとコンテナーによって割り当てられますが、このメソッドは機能しません。

    ファイアウォールを無効にする
  1. コンテナはブリッジ経由でホストにアクセスできないため、外部ネットワークにアクセスできません。ファイアウォールが無効になっている可能性があります。アクセスをブロックするため、ファイアウォールをオフにするか、特定のポートを開くことができます。サーバーでテストし、ファイアウォールをオンにしたところ、コンテナが Baidu ホームページとホストにアクセスできないことがわかりました。ファイアウォールを閉じて
docker

を再起動すると、コンテナに正常にアクセスできるようになりました。 ただし、Bastion マシンのファイアウォールは元々オフになっているため、この方法は役に立ちません。

    Modify
  1. sysctl.conf
  2. ##docker
ホストの内部ネットワークは正常であり、他のホストとのネットワークは正常です。接続に失敗します。他のホストは

docker ホストにマッピングされたポートに接続できず、docker は内部的に外部ホストに接続できません。## を使用してください。 #docker info コマンドで情報を確認すると、次のエラーが表示されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">WARNING: IPv4 forwarding is disabled WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled</pre><div class="contentsignin">ログイン後にコピー</div></div> コマンド vim /etc/sysctl.conf を使用して設定ファイルを編集し、次のコードを追加します。ファイル:

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward=1
ログイン後にコピー

その後、コマンド systemctl restart networkネットワークを再起動し、

docker info

を再度確認すると、警告が消えます。しかし、それでも役に立たず、要塞マシン上のコンテナは依然としてブリッジ経由でホスト マシンにアクセスできず、外部ネットワークにもアクセスできません。 ブリッジをリセットします

  1. コマンドyum install Bridge-utils
  2. を使用してツールをインストールした後、次を使用します
brctl show

ネットワーク ブリッジを確認すると、次のことがわかります。 docker network create [ブリッジ名]
コマンドを使用して、新しいネットワーク ブリッジを作成し、生成されたネットワーク ブリッジを見つけます。 docker がホストに ping できない場合はどうすればよいですか?ブリッジ ID
はまだ 8000.0000000000 です。新しいブリッジ上にコンテナを作成し、再度確認しても変化はありません。これはおそらくブリッジに問題があることを示しています。 再度テストします この時点で、ブリッジ ip172.17.0.1
、コンテナ ip172.0.0.2 です。ホスト関数が見つかりました。 ping ネットワーク ブリッジは接続されていますが、コンテナーは接続できません。コンテナーはネットワーク ブリッジに接続できず、外部ネットワークはおろかホストにも接続できません。ネットワークブリッジに問題がある可能性があります。 <h3>问题解决</h3> <p>  这里<code>docker network生成新的网桥不行,说明dockernetwork存在问题,我们利用刚才下载的bridge-utils来创建网桥。
  首先暂停docker服务,利用指令:

service docker stop
ログイン後にコピー

  添加网桥:

brctl addbr br0
ログイン後にコピー

  添加ip字段:

ip addr add 172.16.0.1/24 dev br0
ログイン後にコピー

  启用网桥br0

ip link set dev br0 up
ログイン後にコピー

  查看网络br0
docker がホストに ping できない場合はどうすればよいですか?

  修改docker默认网桥:

vim /etc/docker/daemon.json
ログイン後にコピー

  添加字段:

"bridge":"br0"
ログイン後にコピー

  重启docker

service docker start
ログイン後にコピー

  此时查看网桥:
docker がホストに ping できない場合はどうすればよいですか?

  在没有挂载容器前,依旧是8000.000000000000。运行测试容器:

docker run -itd --name busy_test busybox
ログイン後にコピー

  查看docker がホストに ping できない場合はどうすればよいですか?:
docker がホストに ping できない場合はどうすればよいですか?

  此时容器挂载在网桥上了,再次查看网桥id
docker がホストに ping できない場合はどうすればよいですか?

  说明已经其作用,进入测试容器内部,docker がホストに ping できない場合はどうすればよいですか?:
docker がホストに ping できない場合はどうすればよいですか?

  成功!
  补充:这里使用docker network新建网桥,没有用,发现新建网桥挂载容器后,其bridge id依旧不变,没有起作用,说明堡垒机上的docker network可能存在问题。

问题补充:

  上面的问题是创建自定义网桥,然后在自定义网桥上连接容器ab,结果宿主机无法pingab,且进入容器内部后,两个容器无法ping通自定义网络,但能彼此相通。
  查了很多资料,发现了这篇文章。博主说问题原因是系统内核的网桥模块bridge.ko加载失败导致,解决问题的方案是升级内核或升级系统。
  升级centos内核参考这篇。
  升级完成后,重装Docker,自定义网桥和容器,成功!不再有网络问题。

推荐学习:《docker视频教程

以上がdocker がホストに ping できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート