【发布时间】:2020-04-28 22:18:26
【问题描述】:
经过整整两天的阅读和尝试,我谦卑地来到这里询问如何使这项工作发挥作用,因为其他答案中没有任何东西可以帮助我完成这项工作。
我使用的是 macos 10.13.6 (High Sierra)
运行 Docker Desktop for mac 2.2.0.5 (43884)
Engine: 19.03.8
Compose 1.25.4
我想运行 jenkins 来研究一些管道的东西,所以这是我的 'docker-compose.yml'
version: "3.2"
services:
jenkins:
build:
dockerfile: dockerfile
context: ./build
ports:
- "8080:8080"
- "50000:50000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/var/jenkins_home
第一个问题是我使用jenkins/jenkins:lts 的映像没有安装docker 客户端,所以即使通过卷映射套接字我也不能使用docker version,此命令的输出是bash: docker: command not found。
这是我仅用于测试的管道(来自 jenkins 文档):
pipeline {
agent { docker { image 'node:6.3' } }
stages {
stage('build') {
steps {
sh 'npm --version'
}
}
}
}
所以通过这个插件https://plugins.jenkins.io/docker-plugin/ 我可以转到“管理 Jenkins > 管理节点和云 > 配置云 > 添加新云”和“Docker 云详细信息...”
我有主机 URI,我可以在其中放置“unix:///var/run/docker.sock”,它将使用我的主机 macos 中的 docker 来执行 jenkins 需要执行的操作。
我尝试了来自互联网的所有建议,从创建 jenkins 用户、docker 用户、将 jenkins 用户放入 docker 组 e 其他东西,但它们都不能在 mac 上运行。
大部分被问到的问题都是针对 linux 的,而且似乎都解决了这个问题,但是当我尝试在 macos 上进行复制时,它就不起作用了。
也许我缺少某些步骤,或者人们已经知道他们必须在某些步骤中执行,但我失败得很惨。
我尝试的一些步骤:
创建使用用户和组jenkins:
sudo dscl . create /Users/jenkins UniqueID 1000 PrimaryGroupID 1000
sudo dscl . create /Groups/jenkins gid 1000
创建了组 docker:
sudo dscl . create /Groups/docker gid 1001
将 jenkins 用户添加到 docker 组
sudo dscl . append /Groups/docker GroupMembership jenkins
检查用户是否真的在组中
$ dsmemberutil checkmembership -u 1000 -g 1001
user is a member of the group
试图从 jenkins 容器内更改套接字的所有者(这就是我构建映像的原因,但它不起作用)
尝试更改主机 macos 上套接字的所有权,但它并没有改变。 套接字始终具有这些权限。
lrwxr-xr-x 1 root daemon 68B Apr 28 10:14 docker.sock -> /Users/metasix/Library/Containers/com.docker.docker/Data/docker.sock
【问题讨论】:
-
对于您的第一个问题,只需在您的 Dockerfile 中下载 docker 客户端
RUN curl https://download.docker.com/linux/static/stable/x86_64/docker-19.03.8.tgz | tar xvz --directory /tmp && mv -v /tmp/docker/docker /usr/local/bin/docker && chmod +x /usr/local/bin/docker && rm -rf /tmp/docker是否还有其他问题,这不起作用?请务必了解:在 Mac 上编辑任何用户或组均无济于事。 Docker for Mac 正在运行一个虚拟机,Docker 守护进程(= 服务器)位于其中。例如“unix:///var/run/docker.sock”在该虚拟机以及所有必要的用户/组内 -
如果你想使用安装在host中的docker,你可以挂载docker bin文件和docker socket。我在 docker 容器中使用 jenkins,docker 安装在安装的主机中以构建和运行图像,它对我来说效果很好。我也在使用mac osx。 - /var/run/docker.sock:/var/run/docker.sock - /usr/local/bin/docker:/usr/bin/docker
-
如果你可以在 mac 上运行 kubernetes(docker for mac 自带 kubernates)。你可以按照这个。 medium.com/faun/…
标签: macos docker jenkins docker-compose jenkins-pipeline