Docker安装及使用记录

发布于:2024-10-08 ⋅ 阅读:(8) ⋅ 点赞:(0)

本文汇总一下 Docker 的安装过程和使用过程中的问题

安装过程

Windows

Linux

  1. 更新软件源:Linux安装前可先更新以下各自发行版包管理器的软件源

  2. 卸载旧版本:如果之前安装过的话,可以先卸载

yum remove docker  docker-common docker-selinux docker-engine
  1. 安装 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

可尝试的解决办法:

  1. 使用 sudo 获取管理员权限,运行 docker 命令
  2. 由于 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/"