在工作中我们有时候会需要自己的站点或者接口去访问内部的其它站点和接口,但又部署在其它机器上,这时候使用docke默认的网络配置是ping不通局域网的ip的,所以我们要自定义配置网络。
经过翻阅docker官方文档,docker服务移动后设置一个docker0虚拟网桥,所有容器都是通过这个网桥连接网络。需要在宿主机设置一个内置网段并绑定到docker服务。
下面以CentOS7系统为例:
service docker stop
ip link set dev docker0 down
brctl delbr docker0
iptables -t nat –F POSTROUTING
新增虚拟网桥:
brctl addbr bridge0
ip addr add 192.168.1.1/24 dev bridge0 (这里注意,不要和要访问的ip地址在同一网段,比如你要访问172.17.4.33,这里就不要设置为 172.17.4.1)
ip link set dev bridge0 up
然后需要修改配置文件:/usr/lib/systemd/system/docker.service
其中新增 $DOCKER_OPTS \
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer
[Service]
Type=notify
NotifyAccess=all
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
$OPTIONS \
$DOCKER_OPTS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY\
$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave
KillMode=process
[Install]
WantedBy=multi-user.target
接下来
vi /etc/sysconfig/docker,
新增:
DOCKER_OPTS=”-b=bridge0″
执行命令:
systemctl daemon-reload
service docker restart
iptables –t nat –L –n