Docker 无法通过HTTP请求从单独的容器访问Jenkins容器

Docker 无法通过HTTP请求从单独的容器访问Jenkins容器,docker,jenkins,networking,docker-compose,dockerfile,Docker,Jenkins,Networking,Docker Compose,Dockerfile,我有一个服务,someservice,它需要向一个Jenkins服务发出http请求,这两个服务都运行在单独的Docker容器中。我的问题是,无论何时我提出请求,我的连接都会被拒绝 some service和Jenkins分别在主机名为some service和Jenkins的端口上运行 我可以在本地机器上成功点击some service之外的Jenkins,方法是: curl -v http://localhost:4040/ 但是,我无法通过以下方式从内部某些服务联系到詹金斯: curl

我有一个服务,
someservice
,它需要向一个
Jenkins
服务发出http请求,这两个服务都运行在单独的Docker容器中。我的问题是,无论何时我提出请求,我的连接都会被拒绝

some service
Jenkins
分别在主机名为
some service
Jenkins
的端口上运行

我可以在本地机器上成功点击
some service
之外的
Jenkins
,方法是:

curl -v http://localhost:4040/
但是,我无法通过以下方式从内部
某些服务
联系到詹金斯:

curl -v http://jenkins:4040/
我正在使用这个简单的
Docker compose.yaml
文件来创建
一些服务
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
您无法从服务内部访问,因为端口4040仅向主机公开。这就是为什么
curl-vhttp://localhost:4040/
在主机上运行

如果您想从另一个容器中访问jenkins,则必须使用端口8080,因为该端口在网络中公开。所以
curl-vhttp://jenkins:8080/
在您的服务范围内将起作用

希望这能澄清这一点。

您无法从服务内部访问,因为端口4040仅暴露于主机。这就是为什么
curl-vhttp://localhost:4040/
在主机上运行

如果您想从另一个容器中访问jenkins,则必须使用端口8080,因为该端口在网络中公开。所以
curl-vhttp://jenkins:8080/
在您的服务范围内将起作用


希望这能澄清这一点。

刚刚通过
一些服务
使用
curl-v成功联系到了
Jenkins
http://jenkins:8080/
,虽然我不知道为什么会这样做?只是在
一些服务中使用
curl-v成功地联系到了
Jenkins
http://jenkins:8080/
,虽然我不知道为什么会这样?这完全有道理。非常感谢。这完全有道理。非常感谢。