ホームページ  >  記事  >  運用・保守  >  Dockerのデフォルトゲートウェイを変更する

Dockerのデフォルトゲートウェイを変更する

王林
王林転載
2020-10-26 17:00:167111ブラウズ

Dockerのデフォルトゲートウェイを変更する

記事の背景:

LAN で Docker を使用するときに遭遇する最も一般的な混乱の 1 つは、ネットワークがネットワーク セグメント間でブロックされる場合があることです。その理由は、デフォルトで Docker によって生成されたゲートウェイが LAN セグメントと競合することがあるためです。たとえば、Docker が 172.16 ネットワーク セグメントのマシンにデプロイされ、その結果の docker0 ブリッジが 172.17 ネットワーク セグメントである場合、同じになります。ネットワーク セグメント内のマシン間に競合があります (つまり、172.17 ネットワーク セグメント内のマシンに ping を送信できません)。

(推奨チュートリアル: docker チュートリアル)

競合を避けるために、最初に思いつくのはゲートウェイを変更することです。例は次のとおりです( Centos を例に挙げます):

service docker stop
# 删除docker防火墙过滤规则
iptables -t nat -F POSTROUTING
# 删除docker默认网关配置
ip link set dev docker0 down
ip addr del 172.17.0.1/16 dev docker0
# 增加新的docker网关配置
ip addr add 192.168.2.1/24 dev docker0
ip link set dev docker0 up
# 检测是否配置成功,如果输出信息中有 192.168.5.1,则表明成功
ip addr show docker0
service docker start
# 验证docker防火墙过滤规则

この変更後、信頼できるようになりますか?答えは「いいえ」です。docker の再起動後も docker0 が再構築され、行った変更が上書きされる可能性があるためです。これは、Docker の IP ルールがハードコーディングされており、自由に変更することはできないことを示しています。しかし、考え方を変えて docker0 を直接強制終了し、新しいブリッジを再構築しましょう:

まず、ブリッジ作成ツール brctl をインストールする必要があります:

sudo yum install -y bridge-utils

作成操作を開始します:

# 1.停止 Docker 服务
service docker stop
 
# 2.创建新的网桥(新的网段)
brctl addbr bridge0
ip addr add 192.168.2.1/24 dev bridge0
ip link set dev bridge0 up
 
# 3.确认网桥信息
ip addr show bridge0
# 4.修改配置文件
/etc/docker/daemon.json(如不存在则创建一个 touch daemon.json),使Docker启动时使用自定义网桥
 
{
  "bridge": "bridge0"
}
# 5.重启 Docker
service docker start
    
# 确认 NAT 网络路由
iptables -t nat -L -n
 
# 6.删除不再使用的网桥
ip link set dev docker0 down
 
brctl delbr docker0
 
iptables -t nat -F POSTROUTING

ステップ 4 で行った変更された設定に関しては、新しいネットワーク ブリッジを参照するためのものですが、実際には、docker 設定ファイルで新しいネットワーク ブリッジを参照することもできます:

echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/sysconfig/docker
sudo service docker start

しかし、それは、新しいネットワーク ブリッジを参照することを意味するものではありません。 docker のカスタム設定ファイルは確実に見れますが、default/docker や sysconfig/docker がない場合はさらに面倒になりますが、解決策は次のとおりです:

$ vi /lib/systemd/system/docker.service
#添加一行
$ EnvironmentFile=-/etc/default/docker
或者
$ EnvironmentFile=-/etc/sysconfig/docker
#-代表ignore error
 
#并修改
$ ExecStart=/usr/bin/docker daemon -H fd://
#改成
$ ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS
#这样才能使用/etc/default/docker里定义的DOCKER_OPTS参数
 
$ systemctl daemon-reload 重载
$ sudo service docker restart

Bridge0 の作成が完了したらdocker0 から Bridge0 に移行すると、表示したくない 172.17 ネットワーク セグメント:

Dockerのデフォルトゲートウェイを変更する

それが存在しない限り、ルーティングして確認できます。そうすると、172.17 ネットワーク セグメント内のマシンに接続されるだけではなくなります。まだある場合は、クリアされるまで ip addr del 172.17.0.1/16 dev docker0 を使用します (新しい docker ブリッジが確立されているため、古いものを削除しても docker の使用には影響しません)。

マシンの再起動後に brctl によって作成されたネットワーク ブリッジが失われる可能性がある場合は、次のコマンドを Linux 自己起動スクリプトに記述し、再起動するたびに実行できます。セルフスタート スクリプトは、/etc/rc.local ファイルに実行可能ステートメント (sh /opt/script.sh & など) を追加することで追加できます。このようにすると、基本的にマシンが再起動されるたびに、bridge0 が確実に作成され、docker サービスが正常に開始できるようになります。

さらに: IP ネットワーク セグメントの競合を解決したいだけで、上記の複雑なプロセスを実行したくない場合は、実際にはコンテンツ "bip" を追加して /etc/docker/daemon.json を変更するだけです。 : 「ip/ netmask」で docker0 ブリッジのネットワーク セグメントを次のように変更します:

brctl addbr bridge0
ip addr add 192.168.2.1/24 dev bridge0
ip link set dev bridge0 up

以上がDockerのデフォルトゲートウェイを変更するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。