运行Docker容器时,主机上没有networking

我使用的是Arch Linux机器,使用此命令运行容器时主机上没有networking:

docker run jenkins 

停止Docker后,networking又回来了。 任何build议都比欢迎。

编辑:

看起来,当用-p选项运行并提供80以外的端口时,networking可用几分钟,然后再次丢失。

 **> docker version** Client: Version: 1.9.1 API version: 1.21 Go version: go1.5.1 Git commit: a34a1d5-dirty Built: Sun Nov 22 00:15:15 UTC 2015 OS/Arch: linux/amd64 Server: Version: 1.9.1 API version: 1.21 Go version: go1.5.1 Git commit: a34a1d5-dirty Built: Sun Nov 22 00:15:15 UTC 2015 OS/Arch: linux/amd64 **> docker info** Containers: 31 Images: 57 Server Version: 1.9.1 Storage Driver: devicemapper Pool Name: docker-8:5-548039-pool Pool Blocksize: 65.54 kB Base Device Size: 107.4 GB Backing Filesystem: Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 3.584 GB Data Space Total: 107.4 GB Data Space Available: 7.741 GB Metadata Space Used: 7.496 MB Metadata Space Total: 2.147 GB Metadata Space Available: 2.14 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.113 (2015-12-05) Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 4.2.5-1-ARCH Operating System: Arch Linux (containerized) CPUs: 4 Total Memory: 7.709 GiB Name: arch ID: OF5Y:H7O4:M4R6:GCF6:NSEU:LNG6:K7NV:FJDM:DUVI:6KOM:LTRB:EUPP 

> iptables -L

 Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination 

这可能是您的docker主机networking设置不适合与Docker。 试一试Arch Linux有关networking的具体说明 ,您可以在Docker文档中find这些说明:

如果使用systemd-network版本220或更高版本手动configurationnetworking,则使用Docker启动的容器可能无法访问您的networking。 从版本220开始,给定networking( net.ipv4.conf.<interface>.forwarding )的转发设置默认为closures 。 此设置可防止IP转发。 它也与启用容器内的net.ipv4.conf.all.forwarding设置的Docker冲突。

要解决这个问题,请编辑Docker主机上的/etc/systemd/network/<interface>.network文件添加>以下块:

 [Network] ... IPForward=kernel ... 

按照预期,此configuration允许从容器转发IP。


另外尝试docker0桥在Arch Linux维基的容器部分没有IP /没有互联网访问关于Docker:

Docker自己实现IP转发,但是默认情况下systemd会覆盖相应的sysctl设置。 以下禁用此覆盖(对于所有接口):

 # cat > /etc/systemd/network/ipforward.network <<EOF [Network] IPForward=ipv4 EOF # cat > /etc/systemd/network/99-docker.conf <<EOF net.ipv4.ip_forward = 1 EOF # sysctl -w net.ipv4.ip_forward=1 

最后重新启动systemd-networkd和docker服务。

解决scheme是用下面的命令创build或编辑/etc/connman/main.conf:

 [General] NetworkInterfaceBlacklist=vmnet,vboxnet,virbr,ifb,docker,veth,eth,wlan 

并重新启动connman。

如此处所述 。