本文汇总一下 Docker 的安装过程和使用过程中的问题
安装过程
Windows
Linux
-
更新软件源:Linux安装前可先更新以下各自发行版包管理器的软件源
-
卸载旧版本:如果之前安装过的话,可以先卸载
yum remove docker docker-common docker-selinux docker-engine
- 安装 docker-ce :安装 docker 时直接通过包管理器安装 docker-ce 这个包名即可
CentOS 7/8
# 安装最新版本
yum -y install docker-ce
# 安装指定版本
yum -y install docker-ce-18.03.1.ce
版本号可以通过 yum list docker-ce --showduplicates | sort -r
命令得到,如下图所示
Ubuntu
直接 sudo apt install docker-ce 安装即可
如果失败可尝试以下命令
sudo apt update
安装Docker所需的依赖项
sudo apt install apt-transport-https ca-certificates curl software-properties-common
使用 Docker 命令
下面是一些使用 docker 的命令
# 启动Docker服务
sudo systemctl start docker
# 设置 docker 开机启动
sudo systemctl enable docker
问题记录
Got permission denied while trying to connect to the Docker daemon socket
执行 docker ps 时报错,详细信息如下:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/json: dial unix /var/run/docker.sock: connect: permission denied
可尝试的解决办法:
- 使用 sudo 获取管理员权限,运行 docker 命令
- 由于 docker 守护进程启动的时候,会默认赋予名字为 docker 的用户组读写 Unix socket 的权限,因此只要创建 docker 用户组,并将当前用户加入到 docker 用户组中,那么当前用户就有权限访问 Unix socket 了,进而也就可以执行 docker 相关命令了。
#添加docker用户组,安装完docker后应该已经有了,不用再添加
sudo groupadd docker
#将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
#更新用户组
newgrp docker
Error response from daemon: Get “https://registry-1.docker.io/v2/”
问题现象如下:
使用虚拟机安装 docker 拉取镜像失败
报以下错误:
vvl@ubuntu:/etc/systemd$ docker pull nginx
Using default tag: latest
Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers
宿主机直接访问 https://registry-1.docker.io/v2/,能打开
汇总一下解决办法
更换镜像地址
使用各云服务商提供的镜像地址或者其他Docker镜像站提供的镜像地址
参考:Docker更换镜像源(附国内可用镜像源地址)
修改/etc/docker/daemon.json
这个文件即可(记得用sudo,如果文件不存在可以自己新建一个同名文件)
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://dockerhub.icu",
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
如果更换了镜像发现还是不行,有可能是镜像地址已经失效了,需要另外寻找可用的镜像地址,或者尝试下面的办法
修改 DNS 配置
如果是DNS问题:网络 ping ip 能通,但是 ping 域名不通,需要修改DNS
以 UbuntuServer 24.04 LTS 为例
如果是虚拟机安装,刚开始 /etc/resolve.conf 文件是下面这样的
这个文件的内容解释如下
- nameserver表示解析域名时使用该地址指定的主机为域名服务器,此处可指定多个。这里127.0.0.53 这个地址是个本地回环地址,和127.0.0.1一样的,发往那个地址的包不会出现在本地系统以外的地方
- search localdomain 表示当提供了一个不包括完全域名的主机名时,在该主机名后自动添加localdomain的后缀。search和nameserver可同时存在,或者只存在其中一个
- options ends0 trust-ad
修改 /etc/resolv.conf
#nameserver 127.0.0.53
options edns0 trust-ad
search localdomain
nameserver 8.8.8.8
nameserver 8.8.4.4
然后执行
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:直接修改 /etc/resolv.conf 其实是临时修改,重启系统会重新还原
修改 /etc/systemd/resolved.conf
,例如:
[Resolve]
DNS=8.8.8.8 114.114.114.114 192.168.4.2
重启域名解析服务
sudo systemctl restart systemd-resolved
sudo systemctl enable systemd-resolved
备份当前的 /etc/resolve.conf,并重新设置 /run/systemd/resolve/resolv.conf 到/etc/resolve.conf的软链接
mv /etc/resolv.conf /etc/resolv.conf.bak
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
查看验证:cat /etc/resolv.conf
下面是一些常用的DNS
nameserver 114.114.114.114
nameserver 114.114.115.115
# 阿里DNS
nameserver 223.5.5.5
nameserver 223.6.6.6
# 百度DNS
nameserver 180.76.76.76
# Google DNS
nameserver 8.8.8.8
nameserver 8.8.4.4
# OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220
Ubuntu 修改 DNS 配置
Ubuntu 修改DNS参考这篇文章:https://forum.ubuntu.org.cn/viewtopic.php?style=9&t=491181
ubuntu 在域名解析时,最直接使用的是/etc/resolve.conf文件,它是/run/systemd/resolve/
resolve.conf的软链接
初始内容如下
如果 systemd-resolve 命令不存在,是因为在systemd 239中,systemd-resolve 被重命名为resolvectl。在大多数情况下,resolvectl 提供了与systemd-resolve相同的选项,但是命名可能略有不同。 systemd-resolve status 使用 resolvectl status 代替
配置 docker daemon 代理
参考:https://www.cnblogs.com/Chary/p/18096678
[Service]
Environment="HTTP_PROXY=http://192.168.65.1:8090/"
Environment="HTTPS_PROXY=http://192.168.65.1:8090/"