使用“时无法连接到Jenkins管道中的docker容器”;Docker外面的Docker”字样;设置
我正在基于这样的代理运行Jenkins作业:使用“时无法连接到Jenkins管道中的docker容器”;Docker外面的Docker”字样;设置,docker,jenkins,docker-compose,cypress,docker-in-docker,Docker,Jenkins,Docker Compose,Cypress,Docker In Docker,我正在基于这样的代理运行Jenkins作业: pipeline { agent { docker { image 'cypress/base:10' args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose -u roo
pipeline {
agent {
docker {
image 'cypress/base:10'
args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose -u root'
}
}
…
注意:docker
和docker compose
安装到我的代理容器中,以便能够在管道阶段内运行docker容器(“docker外部docker”设置)
接下来,我将启动由两个容器组成的docker compose
安装程序-服务器和webapp
…
sh 'docker-compose up --build --detach'
…
在那之后,我想向localhost:8080
发送一个GET请求,这是web应用程序应该从中提供服务的地方。但我明白了
Error: connect ECONNREFUSED localhost:8080
相同的docker compose设置在我的开发机器上工作。端口转发设置正确(8080:8080端口转发在docker compose
配置文件中启用)
我认为这在某种程度上与我在Jenkins中所做的“Docker out of Docker”设置有关在Jenkins Docker out Docker设置中,从技术上讲,Jenkins也是另一个与其他容器“共享”相同空间的容器。也就是说,它可以与它“创建”的容器通信 在我的例子中,我所做的是在docker-compose.yml文件上创建一个自定义网桥网络
version: "3.8"
services:
app:
build:
context: .
ports:
- 8081:8080
depends_on:
- redisdb
networks:
- frontend
- backend
redisdb:
image: redis
ports:
- 127.0.0.1:6380:6379
networks:
- backend
networks:
frontend: {}
backend: {}
创建后,docker compose将使用以下格式创建这些网络:
- {文件夹\名称}\前端(示例:管道\前端)
- {FOLDER_NAME}\u后端
docker network connect pipeline_frontend jenkins
现在从jenkins开始,我可以通过容器的服务名称直接与容器通信。
以我为例,从我的詹金斯,我可以卷曲到http://app:8080
注意:此答案仅适用于Jenkins容器与它创建的容器独占驻留在主机中的情况。我没有在Jenkins有外部节点的设置上测试过这一点。在Jenkins docker out docker设置中,从技术上讲,Jenkins也是另一个与其他容器“共享”相同空间的容器。也就是说,它可以与它“创建”的容器通信 在我的例子中,我所做的是在docker-compose.yml文件上创建一个自定义网桥网络
version: "3.8"
services:
app:
build:
context: .
ports:
- 8081:8080
depends_on:
- redisdb
networks:
- frontend
- backend
redisdb:
image: redis
ports:
- 127.0.0.1:6380:6379
networks:
- backend
networks:
frontend: {}
backend: {}
创建后,docker compose将使用以下格式创建这些网络:
- {文件夹\名称}\前端(示例:管道\前端)
- {FOLDER_NAME}\u后端
docker network connect pipeline_frontend jenkins
现在从jenkins开始,我可以通过容器的服务名称直接与容器通信。
以我为例,从我的詹金斯,我可以卷曲到http://app:8080
注意:此答案仅适用于Jenkins容器与它创建的容器独占驻留在主机中的情况。我还没有在Jenkins有外部节点的设置上测试过这一点。运行lsof-I:8080并检查是否有其他进程正在使用该端口运行lsof-I:8080并检查是否有其他进程正在使用该端口