前言:
学微服务(springcloud)之前,研究了一下docker集成maven自动部署,遇到了一堆问题,在此整理一下
首先,献上我与chatgpt的对话,这里面包含绝大多数问题(没了chatgpt我怎么活啊?(哭))
主要包含maven插件部分
https://chatgpt.com/share/c5c1b1ba-5775-4b33-8785-130306dc001e
主要包含linux部分
https://chatgpt.com/share/b2923509-f80d-4ea9-af81-7a88563a639e
正常步骤:
一,卸载原版docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
二,配置yum源
首先要安装一个yum工具
yum install -y yum-utils
然后配置docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
出现问题
显示“网络不可达”,我没有做任何事情,什么配置都没动,应该不可能是什么dns防火墙等配置问题,检查了一圈也没问题,ping其他国内网站也没问题
问题原因:镜像源不能用了,换个镜像源
步骤
编辑 /etc/yum.repos.d/CentOS-Base.repo 文件,修改或者添加镜像源URL。
我的建议是,将里面的内容全部换成:
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
这里还有一个报错“Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"”写的时候忘记这个错误出现在哪了,反正是出现在这附近,看内容应该也是镜像问题
解决方法:
1、执行命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 进入网络配置
2、需要把ONBOOT属性改成yes,并且加一个DNS1=114.114.114.114
然后执行命令:wq
3、再执行命令systemctl restart network
如果解决不了,直接换镜源
三,下载docker,换阿里云镜像后
输入yum list docker-ce --showduplicates获得所有可下载版本,选择需要需要的版本下载即可
四,docker准备好后,需要开启远程访问才能在远程通过maven插件执行docker命令
步骤:
1,编辑docker.service文件
vi /usr/lib/systemd/system/docker.service
2,找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
3,重启docker
systemctl daemon-reload
systemctl restart docker
4,访问http://ip:2375/version来检查,如果访问通过,则没问题
出现问题
如此配置后运行docker会报错“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”
解决:我一开始把第四步刚才的配置删了【1】,然后
编辑 Docker 守护程序配置文件
1,首先,编辑 Docker 的守护程序配置文件,通常位于 /etc/docker/daemon.json
。
如果文件不存在,则创建它。(我的系统没有,手动创建的)
2,在该文件内添加以下内容
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
3,重启docker
sudo systemctl restart docker
问题
我把原先的允许外部访问的配置撤回了【1】,执行了上面的配置,但到后面远程连接时还是出现了问题
1,编辑docker.service文件
2,找到[service]节点,把ExecStart这一行的内容改为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
其实就是把原来的配置配回来,有点不太一样
至此,docker允许外部访问应该就没问题了(记得开防火墙)
五,配置docker镜像
此外,在后续的连接中,会需要下载基础镜像如openjdk:17,但是,由于某些原因,当执行linux docker命令:docker pull openjdk:17时,会报:
[ERROR] DOCKER> Unable to pull 'openjdk:17' : error pulling image configuration:
Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/5e/5e28ba2b4cdb3a7c3bd0ee2e635a5f6481682b77eabf8b51a17ea8bfe1c05697/data?verify=1720526160-ixYTlEnFG7k9W6NrnnPzoIbUDk0%3D:
dial tcp 157.240.2.36:443:
getsockopt: connection refused [error pulling image configuration:
Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/5e/5e28ba2b4cdb3a7c3bd0ee2e635a5f6481682b77eabf8b51a17ea8bfe1c05697/data?verify=1720526160-ixYTlEnFG7k9W6NrnnPzoIbUDk0%3D:
dial tcp 157.240.2.36:443:
getsockopt: connection refused ]
可能是网络连接问题,当我使用魔法还是没解决
建议换镜像源,这里我用阿里云的镜像源
步骤:
打开阿里云,搜索“容器镜像服务ACR”
得花钱买,但是可以免费试用
进入管理控制台,选择“镜像工具下面的镜像加速器”,按它提示来就行