无法从另一个容器 ping 使用 nginx 公开的 docker 容器

Cannot ping a docker container exposed with nginx from another

提问人:nico_1512 提问时间:11/7/2023 更新时间:11/7/2023 访问量:33

问:

我正在尝试通过 nginx url 从一个容器连接到另一个容器。

Docker-images

基本上,我的基础结构如下:我有两个容器(DC1 和 DC2)和一个容器,使这些容器可以从外部访问。 我已经映射了这两个主机来解析我文件中的环回 IP。Nginx/etc/hosts

127.0.0.1    DC1.local
127.0.0.1    DC2.local

当我尝试通过其 url 从一个容器访问另一个容器时,问题就出现了。 (例如,我运行以访问 DC2 的 bash,我运行并被拒绝连接 (ECONNREFUSED))。docker exec -it DC2 bashping http://DC1.local

如前所述,我可以通过在浏览器中键入两个 URL 从外部访问这两个容器。

这是我的文件。docker-compose


version: "2"

services:

  # Nginx
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    restart: unless-stopped
    volumes:
      - ./nginx/conf/:/etc/nginx/conf.d/:ro


  # DC1
  DC1:
    image: strm/helloworld-http
    expose:
      - 80

  # DC1
  DC2:
    image: strm/helloworld-http
    expose:
      - 80


这是我的nginx.conf:

server {
  listen 80;
  http2 on;
  server_name DC1.local;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass       http://DC1:9999/;
  }
}

server {
  listen 80;
  http2 on;
  server_name DC2.local;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass       http://DC2:8888/;
  }
}

如何通过 URL 将容器 DC2 连接到容器 DC1?http://dc1.local

nginx 网络 nginx-reverse-proxy docker-networking

评论

0赞 STerliakov 11/7/2023
首先,请删除 compose 文件 - 最新版本是 3.9 (!!),版本 2 几年前已弃用。删除(它没有效果)。您的容器真的同时监听 8888 和 9999 吗?文档表明它只侦听 :80。因此,您应该使用 DC1 和 DC2 在 nginx 配置文件中侦听的实际端口 (80),而不是数字的随机组合: 和 .两者使用相同的端口是可以的,因为它没有映射到主机端口。version: "2"exposestrm/helloworld-httpproxy_pass http://DC1:80/;proxy_pass http://DC2:80/;

答: 暂无答案