Docker守护程序绑定到Unix套接字而不是TCP端口。默认状况下,Unix套接字由用户root拥有,而其余用户只能使用sudo访问它。Docker守护程序始终以 root 用户身份运行。
若是您不想在docker命令前加上sudo,请建立一个名为docker的Unix组并向其添加用户。当Docker守护程序启动时,它会建立一个可由docker组成员访问的Unix套接字。git
sudo groupadd docker
sudo usermod -aG docker $USER
注销并从新登陆,以便从新评估您的组成员身份 若是在虚拟机上进行测试,则可能须要从新启动虚拟机才能使更改生效。 在桌面Linux环境(如X Windows)上,彻底注销会话,而后从新登陆。github
验证是否能够运行docker命令sudodocker
docker run hello-world
若是在将用户添加到docker组以前最初使用sudo运行Docker CLI命令,则可能会看到如下错误:json
WARNING: Error loading config file: /home/user/.docker/config.json - stat /home/user/.docker/config.json: permission denied
这表示因为sudo命令,您的~/.docker/目录是使用不正确的权限建立的。 要解决此问题,请删除~/.docker/目录(它会自动从新建立,但任何自定义设置都将丢失),或使用如下命令更改其全部权和权限:ubuntu
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod g+rwx "$HOME/.docker" -R
大多数当前的Linux发行版(RHEL,CentOS,Fedora,Ubuntu 16.04及更高版本)使用systemd来管理系统启动时启动的服务。
systemd缓存
sudo systemctl enable docker
要禁用开机启动改用disablebash
sudo systemctl disable docker
upstart
Docker自动配置为使用upstart启动时启动。要禁用此行为,请使用如下命令:服务器
echo manual | sudo tee /etc/init/docker.override
chkconfig网络
chkconfig docker on # chkconfig docker off
若是您的内核早于3.10版本或者缺乏某些模块,则Docker没法正常运行。要检查内核兼容性,能够下载并运行check-config.sh脚本。curl
curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh bash ./check-config.sh
要查看客户端配置链接到哪一个主机,请检查环境中DOCKER_HOST变量的值
env | grep DOCKER_HOST
若是此命令返回值,则Docker客户端将设置为链接到在该主机上运行的Docker守护程序。若是未设置,则Docker客户端将设置为链接到本地主机上运行的Docker守护程序。若是设置错误,请使用如下命令取消设置:
unset DOCKER_HOST
您可能须要在~/.bashrc或~/.profile等文件中编辑环境,以防止错误地设置DOCKER_HOST变量。 若是DOCKER_HOST按预期设置,请验证Docker守护程序是否在远程主机上运行,以及防火墙或网络中断是否阻止您进行链接。
若是使用手动配置你的网络systemd-network有systemd 219或更高版本,Docker容器可能没法访问您的网络。从systemd版本220 开始,给定网络(net.ipv4.conf.<interface>.forwarding)的转发设置默认为关闭。此设置可防止IP转发。它还与Docker net.ipv4.conf.all.forwarding在容器中启用设置的行为相冲突。
要在RHEL,CentOS或Fedora上解决此问题,请<interface>.network 在/usr/lib/systemd/network/Docker主机上编辑该文件(例如:)/usr/lib/systemd/network/80-container-host0.network并在该[Network]部分中添加如下块。
[Network] ... IPForward=kernel # OR IPForward=true ...
此配置容许按预期从容器进行IP转发。
DNS resolver found in resolv.conf and containers can't use it
使用GUI的Linux系统一般运行网络管理器,该网络管理器使用dnsmasq在环回地址上运行的 实例,例如127.0.0.1或 127.0.1.1缓存DNS请求,并将此条目添加到 /etc/resolv.conf。该dnsmasq服务可加速DNS查询并提供DHCP服务。此配置不拥有本身的网络命名空间的码头工人容器内工做,由于多克尔容器解决回环地址,如127.0.0.1对 自身,这是很不可能的运行在本身的回送地址的DNS服务器。
若是Docker检测到没有引用的DNS服务器/etc/resolv.conf是功能齐全的DNS服务器,则会出现如下警告,而且Docker使用Google提供的公共DNS服务器8.8.8.8并8.8.4.4进行DNS解析。
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
若是您看到此警告,请先检查您是否使用dnsmasq:
ps aux |grep dnsmasq
若是您的容器须要解析网络内部的主机,则公共名称服务器不够用。你有两个选择:
配置文件的默认位置是/etc/docker/daemon.json。您可使用--config-file 守护程序标志更改配置文件的位置。如下文档假定配置文件位于/etc/docker/daemon.json。
sudo nano /etc/docker/daemon.json
{ "dns": ["8.8.8.8", "8.8.4.4"] }
若是您的内部DNS服务器没法解析公共IP地址,请至少包含一个DNS服务器,以便您能够链接到Docker Hub,以便您的容器能够解析Internet域名。
保存并关闭文件。
sudo service docker restart
docker pull hello-world
docker run --rm -it alpine ping -c4 <my_internal_host> PING google.com (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms 64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms 64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms 64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
禁用 DNSMASQ
ubuntu的
若是您不想更改Docker守护程序的配置以使用特定的IP地址,请按照如下说明dnsmasq在NetworkManager中禁用。
# dns=dnsmasq
保存并关闭文件。 3. 从新启动NetworkManager和Docker。做为替代方案,您能够从新启动系统。
sudo restart network-manager sudo restart docker
RHEL,CentOS或Fedora
要dnsmasq在RHEL,CentOS或Fedora上禁用:
sudo service dnsmasq stop sudo systemctl disable dnsmasq
若是您在运行Docker的同一主机上运行防火墙而且想要从另外一台主机访问Docker Remote API并启用远程访问,则须要配置防火墙以容许Docker端口上的传入链接,默认为2376if启用TLS加密传输或2375 以其余方式启用。
两个常见的防火墙守护程序是 UFW(简单防火墙)(一般用于Ubuntu系统)和firewalld(一般用于基于RPM的系统)。请参阅操做系统和防火墙的文档,但如下信息可能有助于您入门。这些选项至关宽松,您可能但愿使用不一样的配置来更好地锁定系统。
<direct> [ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -i zt0 -j ACCEPT </rule> ] [ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -o zt0 -j ACCEPT </rule> ] </direct>
Your kernel does not support cgroup swap limit capabilities
在Ubuntu或Debian主机上,使用图像时,您可能会看到相似于如下内容的消息。
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
在基于RPM的系统上不会发生此警告,这些系统默认启用这些功能。
若是您不须要这些功能,则能够忽略该警告。您能够按照这些说明在Ubuntu或Debian上启用这些功能。即便Docker未运行,内存和交换计费也会占总可用内存的1%左右,整体性能下降10%。
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
sudo update-grub
从新启动系统后,更改将生效。