macOS环境下Jenkins Docker容器内无法运行Docker命令问题求助
macOS下Jenkins Docker容器运行docker命令报错解决方案
问题根因
你遇到的问题是两个原因共同导致的:
- macOS上安装的Docker Desktop提供的
/usr/local/bin/docker不是Linux可运行的原生二进制,是适配macOS系统的存根程序,就算成功挂载到基于Linux的Jenkins容器内也无法执行 - Docker Desktop for macOS默认仅开放部分目录的挂载权限,
/usr/local/bin不在默认共享目录列表中,导致你挂载的docker二进制实际上没有成功写入容器内的/usr/bin路径,所以执行ls /usr/bin/docker无输出
解决方案
直接放弃挂载宿主机docker二进制的方案,改用以下两种可行方式:
方案1:在运行中的容器内直接安装Docker CLI
- 以root身份进入Jenkins容器:
docker exec -u root -it $CONTAINER_ID bash
- 执行命令安装Docker官方CLI:
apt update && apt install -y ca-certificates curl gnupg lsb-release mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt update && apt install -y docker-ce-cli
- 给jenkins用户分配docker操作权限:
usermod -aG docker jenkins
- 退出容器后重启容器生效:
docker restart $CONTAINER_ID
重新进入容器执行docker ps即可正常输出结果。
方案2:自定义Jenkins镜像(避免容器重启后重新安装)
如果需要长期使用,建议直接构建自带Docker CLI的Jenkins镜像:
- 新建
Dockerfile写入以下内容:
FROM jenkins/jenkins:lts USER root RUN apt update && apt install -y ca-certificates curl gnupg lsb-release \ && mkdir -m 0755 -p /etc/apt/keyrings \ && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ && apt update && apt install -y docker-ce-cli \ && usermod -aG docker jenkins USER jenkins
- 执行构建命令:
docker build -t jenkins-with-docker:lts .
- 使用新镜像启动容器,仅挂载docker.sock即可:
docker run -p 8080:8080 -p 50000:50000 -d \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkins-with-docker:lts
内容的提问来源于stack exchange,提问作者SimpleNiko
相关产品推荐
相关产品推荐

