引言
现需通过gitlab-runner来构建jar部署的镜像,发现在job中无法使用docker指令,解决的过程中出现一系列异常,在此做个问题解决的记录。
内容
通过docker-compose部署
name: java-env
services:
env-gitlab-runner:
restart: always
image: env/gitlab-runner-java:latest
container_name: env-gitlab-runner-java
build:
context: ./runner/environment
dockerfile: dockerfile
privileged: true
user: "root"
volumes:
- ./runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-runner:/home/gitlab-runner
environment:
TZ: "Asia/Shanghai"
networks:
- env-network
#############################网络#############################
networks:
env-network:
name: env_network
external: true
部署完成后选择shell模式注册,在其job中无法使用docker指令
因为在job中脚本时在gitlab-runner用户下运行的所以需要把gitlab-runner添加到docker用户组,以及把/var/run/docker.sock
文件添加到docker用户组。
相关异常信息
root@fewwwcee16:/# sudo -u gitlab-runner docker ps
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json”: dial unix /var/run/docker.sock: connect: permission denied
- 测试gitlab-runner用户是否可以使用docker指令
sudo -u gitlab-runner docker ps
- 添加gitlab-runner用户到docker用户组
sudo usermod -aG docker 用户名
刷新用户组成员信息
newgrp docker
- 将
/var/run/docker.sock
文件添加到docker用户组
chown root:docker /var/run/docker.sock
其他问题处理
- 问题1 gitlab-runner容器中默认一些指令是不存在的,其容器系统为Ubuntu
apt update
apt install -y sudo vim
- 问题2 docker指令未加入全局环境变量,除其所属root用户外其他用户无法直接使用其指令,将其加入到环境变量中。
export PATH=$PATH:/usr/local/bin