Networking Docker容器在localhost上可见,但在具有自定义桥0的其他主机上不可见 在RHEL 7.1上安装新的Docker 1.7.0
因此,我安装了最新的Docker 1.7.0,我无法让这个新服务器服务于外部世界Networking Docker容器在localhost上可见,但在具有自定义桥0的其他主机上不可见 在RHEL 7.1上安装新的Docker 1.7.0,networking,docker,ipv6,iptables,connection-timeout,Networking,Docker,Ipv6,Iptables,Connection Timeout,因此,我安装了最新的Docker 1.7.0,我无法让这个新服务器服务于外部世界 [root@pppdc9prd8ok eea.docker.jenkins]# uname -a Linux pppdc9prd8ok 3.10.0-229.4.2.el7.x86_64 #1 SMP Fri Apr 24 15:26:38 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux [root@pppdc9prd8ok eea.docker.jenkins]# docker
[root@pppdc9prd8ok eea.docker.jenkins]# uname -a
Linux pppdc9prd8ok 3.10.0-229.4.2.el7.x86_64 #1 SMP Fri Apr 24 15:26:38 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@pppdc9prd8ok eea.docker.jenkins]# docker --version
Docker version 1.7.0, build 0baf609
[root@pppdc9prd8ok eea.docker.jenkins]# docker info
Containers: 10
Images: 110
Storage Driver: devicemapper
Pool Name: docker-253:0-4374531-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 4.398 GB
Data Space Total: 107.4 GB
Data Space Available: 99.18 GB
Metadata Space Used: 7.029 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.14 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /app_local/var-lib-docker/devicemapper/devicemapper/data
Metadata loop file: /app_local/var-lib-docker/devicemapper/devicemapper/metadata
Library Version: 1.02.93-RHEL7 (2015-01-28)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-229.4.2.el7.x86_64
Operating System: Red Hat Enterprise Linux
CPUs: 4
Total Memory: 15.52 GiB
Name: pppdc9prd8ok
ID: 3M2F:QYY7:Z5DI:YTVI:RAV4:SHPM:C3RC:CWIY:FHFA:ZYAS:SNHG:CMTY
使用bridge0而不是docker0设置Docker
由于我们的内部网络发生冲突,我遵循Docker文档中的高级网络主题
我使用docker-compose.yml在端口80上启动了一个docker容器,如下所示:
[root@pppdc9prd8ok eea.docker.jenkins]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9f5637552ba eeacms/jenkins:master "/usr/local/bin/jenk 4 seconds ago Up 4 seconds 0.0.0.0:50000->50000/tcp, 0.0.0.0:80->8080/tcp eeadockerjenkins_master_1
c6fcac33b044 yorkshirekev/postfix "/bin/bash -c '/star 7 seconds ago Up 6 seconds eeadockerjenkins_postfix_1
199ad3d48dfe eeacms/jenkins:slave "/bin/sh -c /bin/jen 5 minutes ago Up 47 seconds eeadockerjenkins_worker_1
3a8057253b7d eeacms/jenkins:slave "/bin/sh -c /bin/jen 5 minutes ago Up 47 seconds eeadockerjenkins_worker_2
fced8be92258 eeacms/jenkins:slave "/bin/sh -c /bin/jen 5 minutes ago Up 46 seconds eeadockerjenkins_worker_3
7cb4cfabd3c2 mongo "/entrypoint.sh mong 2 weeks ago Up 20 seconds 0.0.0.0:27017->27017/tcp mongodb-dotci
无法从Internet访问端口80上的服务器
从“ps”打印的内容来看,在端口80上运行的服务非常好,绑定到端口80上的全ip地址0.0.0.0。但是,尝试从其他位置访问此计算机时,我无法执行此操作
Marcello-New2015:~ mdesales$ curl http://docker.corp.intuit.net/
curl: (7) Failed to connect to docker.corp.intuit.net port 80: Operation timed out
存在来自本地主机的内部路由
奇怪,因为我已经检查过容器是否可以从内部访问并且它正在工作
[root@pppdc9prd8ok eea.docker.jenkins]# curl localhost | grep html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 26791 100 26791 0 0 110k 0 --: <!DOCTYPE html><html><head resURL="/static/9ebca566">
--:-- --:--:-- --:--:-- 110k
iptables显示了将呼叫正确转发到接口的规则
ifconfig和iptables正确显示了所有接口
不确定要去哪里:(帮助…简短回答:安装“bridge0”时删除“docker0”桥接器!
好吧,我越来越多地挖掘,发现docker0的存在以某种方式干扰了网络
答案很长:逐步验证
我首先验证了bridge0实际上正在使用,但事实并非如此
[root@pppdc9prd8ok eea.docker.jenkins]# systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Drop-In: /etc/systemd/system/docker.service.d
└─http-proxy.conf
Active: active (running) since Fri 2015-07-10 07:23:14 UTC; 30min ago
Docs: https://docs.docker.com
Main PID: 18034 (docker)
CGroup: /system.slice/docker.service
├─18034 /usr/bin/docker -d -H fd://
├─18271 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 27017 -container-ip 192.168.4.5 -container-port 27017
├─18490 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 50000 -container-ip 192.168.4.8 -container-port 50000
└─18498 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 192.168.4.8 -container-port 8080
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.124143415Z" level=info msg="GET /v1.18/containers/json?all=0&limit=-1&trunc_cmd=0&filters=%7B%22label%22%3A+%5...5D%7D&size=0"
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.126520912Z" level=info msg="GET /v1.18/containers/c6fcac33b04480970aa3606f86e5ed9571a320b6ff5cdc8ecdf81edfb416720a/json"
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.128362232Z" level=info msg="GET /v1.18/containers/json?all=1&limit=-1&trunc_cmd=0&filters=%7B%22label%22%3A+%5...5D%7D&size=0"
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.130940471Z" level=info msg="POST /v1.18/containers/create?name=eeadockerjenkins_master_1"
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.299140678Z" level=info msg="GET /v1.18/containers/a9f5637552bad2d608f838cdb2a263452f5e98962c45ebe759ed0904211d6962/json"
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.301413002Z" level=info msg="POST /v1.18/containers/a9f5637552bad2d608f838cdb2a263452f5e98962c45ebe759ed0904211d6962/start"
Jul 10 07:23:57 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:57.504799799Z" level=info msg="DELETE /v1.18/containers/0665b35b4f1df8e8d098a429ae4a057a91c36cc341d33f710b00cc3c4...alse&v=False"
Jul 10 07:23:58 pppdc9prd8ok docker[18034]: time="2015-07-10T07:23:58.657884948Z" level=info msg="GET /v1.18/containers/json?all=0&limit=-1&trunc_cmd=0&filters=%7B%22label%22%3A+%5...5D%7D&size=0"
Jul 10 07:24:01 pppdc9prd8ok docker[18034]: time="2015-07-10T07:24:01.793020916Z" level=info msg="GET /v1.19/containers/json"
Jul 10 07:43:25 pppdc9prd8ok docker[18034]: time="2015-07-10T07:43:25.850272360Z" level=info msg="GET /v1.19/info"
Hint: Some lines were ellipsized, use -l to show in full.
结果表明,RHEL7.1在安装Docker时没有指向环境变量,而是使用服务upstart
[root@pppdc9prd8ok eea.docker.jenkins]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker -d
other_args="-b=bridge0"
我必须在以下文件中添加行EnvironmentFile=-/etc/sysconfig/docker,并将环境变量添加到“docker-d”命令中:
重新启动docker服务现在会在系统中显示docker0参数
[root@pppdc9prd8ok eea.docker.jenkins]# systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Drop-In: /etc/systemd/system/docker.service.d
└─http-proxy.conf
Active: active (running) since Fri 2015-07-10 07:23:14 UTC; 30min ago
Docs: https://docs.docker.com
Main PID: 18034 (docker)
CGroup: /system.slice/docker.service
├─18034 /usr/bin/docker -d -b=bridge0 -H fd://
├─18271 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 27017 -container-ip 192.168.4.5 -container-port 27017
├─18490 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 50000 -container-ip 192.168.4.8 -container-port 50000
└─18498 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 192.168.4.8 -container-port 8080
然而,服务仍然不起作用…我最后一次检查并让它起作用的是移除了桥“docker0”。它起作用了
[root@pppdc9prd8ok eea.docker.jenkins]# ip link set docker0 down
[root@pppdc9prd8ok eea.docker.jenkins]# brctl delbr docker0
[root@pppdc9prd8ok eea.docker.jenkins]# ifconfig
bridge0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.1 netmask 255.255.252.0 broadcast 192.168.7.255
ether 16:1b:b8:42:5c:9e txqueuelen 0 (Ethernet)
RX packets 6550 bytes 6542448 (6.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6133 bytes 6585941 (6.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.132.52.146 netmask 255.255.252.0 broadcast 10.132.55.255
ether 00:50:56:01:0e:ba txqueuelen 1000 (Ethernet)
RX packets 114644 bytes 11944039 (11.3 MiB)
RX errors 0 dropped 626 overruns 0 frame 0
TX packets 19671 bytes 2808015 (2.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@pppdc9prd8ok eea.docker.jenkins]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker -d
other_args="-b=bridge0"
[root@pppdc9prd8ok eea.docker.jenkins]# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/docker -d $other_args -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
[root@pppdc9prd8ok eea.docker.jenkins]# systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Drop-In: /etc/systemd/system/docker.service.d
└─http-proxy.conf
Active: active (running) since Fri 2015-07-10 07:23:14 UTC; 30min ago
Docs: https://docs.docker.com
Main PID: 18034 (docker)
CGroup: /system.slice/docker.service
├─18034 /usr/bin/docker -d -b=bridge0 -H fd://
├─18271 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 27017 -container-ip 192.168.4.5 -container-port 27017
├─18490 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 50000 -container-ip 192.168.4.8 -container-port 50000
└─18498 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 192.168.4.8 -container-port 8080
[root@pppdc9prd8ok eea.docker.jenkins]# ip link set docker0 down
[root@pppdc9prd8ok eea.docker.jenkins]# brctl delbr docker0
[root@pppdc9prd8ok eea.docker.jenkins]# ifconfig
bridge0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.1 netmask 255.255.252.0 broadcast 192.168.7.255
ether 16:1b:b8:42:5c:9e txqueuelen 0 (Ethernet)
RX packets 6550 bytes 6542448 (6.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6133 bytes 6585941 (6.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.132.52.146 netmask 255.255.252.0 broadcast 10.132.55.255
ether 00:50:56:01:0e:ba txqueuelen 1000 (Ethernet)
RX packets 114644 bytes 11944039 (11.3 MiB)
RX errors 0 dropped 626 overruns 0 frame 0
TX packets 19671 bytes 2808015 (2.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Marcello-New2015:~ mdesales$ curl http://docker.corp.intuit.net/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 26804 100 26804 0 0 60458 0 --:--:-- --:--:-- --:--:-- 60505