微服务架构从入门到精通之DevOps实践篇(八) CI/CD过程遇到的问题
本章主要介绍GitLab CI/CD过程中遇到的问题。
问题1. Docker in Docker模式**册 Runner
如果gitlab-runner已经运行了,我们可以通过
执行
gitlab-runner register \
--non-interactive \
--url "http://192.168.0.102/" \
--registration-token "3k1yGnbpuS2skUfrbB3t" \
--executor "docker" \
--docker-image alpine:3 \
--description "102-docker-runner" \
--tag-list "docker" \
--run-untagged \
--locked="false" \
--docker-privileged
注意:docker in docker 模式要求docker-privileged=“true”。
问题2. Insecure Registry下Docker Push的问题
在docker push的时候遇到如下错误:
2.1 解决方法
在/etc/docker/daemon.json
2.2 解决方法
修改Registry server上的Docker daemon的配置,为DOCKER_OPTS增加–insecure-registry:DOCKER_OPTS="--insecure-registry xxx:5000”。
重启Docker Daemon,启动Registry容器:
$ sudo service docker restart
docker stop/waiting
docker start/running, process 6712
$ sudo docker run -d -p 5000:5000 -v `pwd`/data:/var/lib/registry --restart=always --name registry registry:2
5966e92fce9c34705050e19368d19574e021a272ede1575385ef35ecf5cea019
尝试再次Push image:
$ docker push xxxx:5000/test/busybox
The push refers to a repository
[xxxx:5000/test/busybox] (len: 1) 65e4158d9625: Pushed
5506dda26018: Pushed
latest: digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892 size: 2739
push ok!
问题3. Secure Registry下Docker Push的问题
$ docker push mydockerhub.com:5000/test/busybox
The push refers to a repository [mydockerhub.com:5000/test/busybox] (len: 1)
unable to ping registry endpoint https://mydockerhub.com:5000/v0/
v2 ping attempt failed with error: Get https://mydockerhub.com:5000/v2/: x509: certificate signed by unknown authority
v1 ping attempt failed with error: Get https://mydockerhub.com:5000/v1/_ping: x509: certificate signed by unknown authority
push失败了!从错误日志来看,docker client认为server传输过来的证书的签署方是一个unknown authority(未知的CA),因此验证失败。我们需要让docker client安装我们的CA证书:
$ sudo mkdir -p /etc/docker/certs.d/mydockerhub.com:5000
$ sudo cp certs/domain.crt /etc/docker/certs.d/mydockerhub.com:5000/ca.crt
$ sudo service docker restart //安装证书后,重启Docker Daemon
另外,macOS的用户还需要额外执行下面的命令:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
再执行Push,我们看到了成功的输出日志。