我有一个服务some-service
,它需要向Jenkins
服务发出http请求,这两个服务都在单独的Docker容器中运行。我的问题是,每当我提出请求时,我的连接都会被拒绝。
some-service
和Jenkins
分别在主机名为some-service
和jenkins
的端口3030
和4040
上运行。
我可以用在some-service
之外的本地机器上成功命中Jenkins
curl -v http://localhost:4040/
但是,我无法使用从some-service
内部到达Jenkins
curl -v http://jenkins:4040/
我使用这个简单的Docker-compose.yaml
文件来创建some-service
和Jenkins
:
version: '3'
services:
some-service:
container_name: service
image: service:latest
hostname: some-service
build:
context: service/
dockerfile: Dockerfile
environment:
GET_HOSTS_FROM: dns
networks:
- eg-net
ports:
- 3030:3030
depends_on:
- jenkins
links:
- jenkins
labels:
kompose.service.type: LoadBalancer
jenkins:
container_name: jenkins
image: jenkinsci/blueocean
restart: always
hostname: jenkins
networks:
- eg-net
ports:
- 4040:8080
volumes:
- ./jenkins-data:/var/jenkins_home
networks:
eg-net:
driver: bridge
您无法访问http://jenkins:4040/因为端口4040仅向主机暴露。这就是主机上curl -v http://localhost:4040/
工作的原因。
如果你想从另一个容器中访问jenkins,你必须使用端口8080,因为这个端口在网络中是公开的。因此,您服务范围内的curl -v http://jenkins:8080/
将起作用。
希望这能澄清这一点。