docker - 如何从本地 Kubernetes 实例上运行的 jenkins 映像访问 docker
问题描述
我在我的 Macintosh 计算机上运行 Kubernetes,我正在尝试运行一个 Jenkins 映像,该映像能够连接到内部 docker 系统,然后启动更多 docker 映像以便能够在它们上运行作业。到目前为止,我还没有让它工作,我希望有人能提供帮助。
我正在运行的 docker 版本是:
- Docker 桌面 2.0.0.0-mac81 (29211) 稳定版
- 引擎 10.09.0
Kubernetes v1.10.3
- 我从从 tar 文件安装 docker 到实际使用 apt-get
- 我还尝试将 Jenkins 用户添加到通过 apt-get 安装 docker 时创建的 docker 组
我的 Docker 文件
FROM jenkins/jenkins:lts
USER root
RUN apt-get update \
&& apt-get install -y \
maven \
vim \
libunwind8 \
gettext \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
RUN apt-get update -qq \
&& apt-get install docker-ce -y
USER jenkins
和我的 deployment.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
namespace: deployment-tools
spec:
replicas: 1
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: my/jenkins
imagePullPolicy: Never
env:
- name: JAVA_OPTS
value: -Djenkins.install.runSetupWizard=false
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
- name: docker-socket
mountPath: /var/run/docker.sock
securityContext:
# Specify fsGroup for pod, so that the persistent volume is writable for the non-privileged uid/gid 1000
runAsUser: 1000
fsGroup: 1000
volumes:
- name: jenkins-home
hostPath:
path: /Users/myUser/links/code/jenkins/filesystem
type: Directory
- name: docker-socket
hostPath:
path: /var/run/docker.sock
type: File
我目前正在尝试通过挂载我的本地文件系统 docker 套接字来访问子系统,但它给了我这个错误:
myUser@mymac jenkins (master) $ kubectl exec -it jenkins-78689b8786-rjqf6 --namespace=deployment-tools -- /bin/bash
jenkins@jenkins-78689b8786-rjqf6:/$ docker images list
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/json?filters=%7B%22reference%22%3A%7B%22list%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied
而且我希望它不会抛出错误并返回我已安装在计算机上的 docker 映像列表。
解决方案
推荐阅读
- sql-server - 用历史平均值替换月值
- google-sheets - 谷歌表格查询=真
- python - 使用队列实现链表:Python
- git - 如何将“origin/master”添加到本地仓库(可能还有远程仓库),尽管我已经可以推送到远程
- html - 所选选项中的平均答案(按字母值)
- python - 用 numpy 数组/pandas 数据框中最接近的记录替换每条记录
- rust - Rust 宏:单元类型?
- snowflake-cloud-data-platform - 角色创建问题
- mysql - 无状态 bean 内 JPQL 数据中的错误
- asp.net - Asp.Net Core Angular SPA 本地化