文章目录
  1. 1. 安装Docker的可选配置
    1. 1.1. 新建用户组 docker
    2. 1.2. Adjust memory and swap accounting
    3. 1.3. Enable UFW forwarding
    4. 1.4. Configure a DNS server for use by Docker
  2. 2. Docker 网络设置

昨天build docker时遇到连接网络失败的问题,折腾了一番后还是不行。 但是今天重启后再试时,又没问题了。所以具体的是什么问题引起的话,就没法确认了,不过最有可能是DNS的问题。 Container打印出的error log为下面内容。

npm ERR! fetch failed https://r.cnpmjs.org/cross-spawn/download/cross-spawn-0.2.9.tgz
npm WARN retry will retry, error on last attempt: Error: getaddrinfo ENOTFOUND r.cnpmjs.org
npm ERR! fetch failed https://r.cnpmjs.org/open/download/open-0.0.5.tgz

安装Docker的可选配置

首先是重新看了一遍Docker Installion Guide, 将可选的一些操作试了一次。 Optional Configurations for Docker on Ubuntu.

新建用户组 docker

运行docker需要root权限,每一次命令都需要加sudo, sudo docker ...。当前当前用户添加docker组后, docker会在docker组下运行, 就不需要再用sudo了。 其实docker组和root组是相同的。

$ sudo usermod -aG docker ubuntu
$ docker run hello-world

Adjust memory and swap accounting

编辑/etc/default/grub, 设置GRUB_CMDLINE_LINUX的内容为如下, 并保存内容

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

再更新grub设置

$ sudo update-grub

Enable UFW forwarding

本人机器上ufw的是inactive就没做调整。不过是记录下相关步骤。

$ sudo ufw status
$ sudo nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
$ sudo ufw reload
$ sudo ufw allow 2375/tcp

Configure a DNS server for use by Docker

查看后发现nameserver 127.0.0.1在文件/etc/resolv.conf里。 我采用是设置docker的DOCKER_OPTS:

$ sudo nano /etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8"
$ sudo restart docker

另一种方式是停用dnsmasq:

$ sudo nano /etc/NetworkManager/NetworkManager.conf
# dns=dnsmasq
$ sudo restart network-manager
$ sudo restart docker

Docker 网络设置

运行Docker的主机上会建立docker0的桥接,和类似vethAQI2QT的虚拟网卡, 进出Docker Container的数据包都需要经过docker0.

查看网卡信息。 排查container问题时,可以使用$ ifconfig docker0查看经过的数据包数量,被拒数量,和总大小。在docker build过程中,需要下载文件包,如果长时间没信息打印出,可查看docker0的数据总量大小是否有变化。

$ ifconfig -a
$ ifconfig docker0
$ ip addr
$ ip route
$ docker run -ti --rm node:0.12 ping -c 4 8.8.8.8

IP包转发,ip_forward:

$ sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 0
$ sysctl net.ipv4.conf.all.forwarding=1
$ sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 1

查看iptables设置

$ sudo iptables -L -n
$ sudo iptables -t nat -L -n

Container DNS, 三个文件: /etc/hostname, /etc/hosts, /etc/resolv.conf

$ mount
...
/dev/disk/by-uuid/1fec...ebdf on /etc/hostname type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/hosts type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/resolv.conf type ext4 ...
...
文章目录
  1. 1. 安装Docker的可选配置
    1. 1.1. 新建用户组 docker
    2. 1.2. Adjust memory and swap accounting
    3. 1.3. Enable UFW forwarding
    4. 1.4. Configure a DNS server for use by Docker
  2. 2. Docker 网络设置