我正在尝试创建一个Kubernetes部署,它允许在同一个主机上构建Docker映像和Jenkins。下面是我对jenkins-docker-in-docker部署中的Docker和Jenkins容器中包含Docker的部署的YAML配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-docker-in-docker
spec:
selector:
matchLabels:
app: jenkins-docker-in-docker
replicas: 1
template:
metadata:
labels:
app: jenkins-docker-in-docker
spec:
containers:
- name: dind-daemon
image: docker:18.01.0-dind
resources:
requests:
cpu: 20m
memory: 512Mi
securityContext:
privileged: true
volumeMounts:
- name: docker-graph-storage
mountPath: /var/lib/docker
- name: docker-cmds
image: docker:18.01.0
command: ['docker', 'run', '-p', '80:80', 'httpd:latest']
resources:
requests:
cpu: 10m
memory: 256Mi
env:
- name: DOCKER_HOST
value: tcp://localhost:2375
- name: ml-services
image: trion/jenkins-docker-client
ports:
- containerPort: 8080使用从https://www.jenkins.io/doc/tutorials/build-a-java-app-with-maven/复制的简单管道:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
}
}当我试图构建时,我会收到以下错误:
First time build. Skipping changelog.
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] isUnix
[Pipeline] sh
+ docker inspect -f . maven:3-alpine
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[Pipeline] isUnix
[Pipeline] sh
+ docker pull maven:3-alpine
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE我现在似乎不正确的理解是,容器dind-daemon、docker-cmds和ml-services容器存在于同一个部署中,在本例中称为jenkins-docker-in-docker。因此,Docker和Jenkins应该可以在jenkins-docker-in-docker上使用
我是否配置了Kubernetes文件不正确?
更新:
我修改了yaml以设置DOCKER_HOST环境变量:
- name: ml-services
env:
- name: DOCKER_HOST
value: "dind-daemon:2375"
image: trion/jenkins-docker-client
ports:
- containerPort: 8080关于Jenkins的错误现在是:
在连接过程中出错:获取http://dind-daemon:2375/v1.40/containers/maven:3-alpine/json:拨号tcp:查找isUnix上的10.245.0.10:53:没有这样的主机管道isUnix管道sh
我是否需要在10.245.20.10:53上公开坞守护进程?
更新2:
在接受答案的帮助下,我使用以下部署完成了这项工作:
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-docker-in-docker1.1
spec:
selector:
matchLabels:
app: jenkins-docker-in-docker1.1
replicas: 1
template:
metadata:
labels:
app: jenkins-docker-in-docker1.1
spec:
containers:
- name: dind-daemon
image: docker:18.01.0-dind
resources:
requests:
cpu: 20m
memory: 512Mi
securityContext:
privileged: true
volumeMounts:
- name: docker-graph-storage
mountPath: /var/lib/docker
- name: jenkins-home
mountPath: /var/jenkins_home
- name: docker-cmds
image: docker:18.01.0
command: ['docker', 'run', '-p', '80:80', 'httpd:latest']
resources:
requests:
cpu: 10m
memory: 256Mi
env:
- name: DOCKER_HOST
value: tcp://localhost:2375
- name: ml-services
env:
- name: DOCKER_HOST
value: tcp://localhost:2375
image: trion/jenkins-docker-client
ports:
- containerPort: 8080
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
- name: docker-graph-storage
emptyDir: {}
- name: jenkins-home
emptyDir: {}我可能已经在上面的.yaml配置中包含了一些冗余配置,它使用Jenkins执行一个Docker in Docker容器,并成功地执行以下的Jenkinsfile
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
}
}发布于 2021-04-08 22:22:17
Docker尝试使用unix套接字连接到守护进程。当没有设置DOCKER_HOST环境变量时,就会发生这种情况。
使用正确的主机和端口连接到您的停靠守护进程。在您的设置中,它将是“daemon”。
https://stackoverflow.com/questions/67011438
复制相似问题