一尘不染

Nginx反向代理到主机中的应用

go

我有一个在Docker外部在端口5000上运行的应用程序。我试图通过Dockercompose在nginx中运行反向代理,但无法与主机的端口5000通信。在我的docker-compose.yml文件中,我具有:

ports:
  - 80:80
  - 443:443
  - 5000:5000

当我尝试运行此命令时,我得到:

ERROR: for nginx  Cannot start service nginx: driver failed programming external connectivity on endpoint nginx (374026a0d34c8b6b789dcd82d6aee6c4684b3201258cfbd3fb18623c4101): Error starting userland proxy: listen tcp 0.0.0.0:5000: bind: address already in use

如果我注释掉,- 5000:5000我得到:

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream

如何从Docker Nginx容器连接到主机中已运行的应用程序?

编辑:

我的nginx.conf文件

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
    upstream mysite {
        server 0.0.0.0:5000;
    }

    server {
        listen 80;
        server_name localhost;

        location / {
        proxy_pass http://mysite;
        }
    }
}

当我尝试卷曲localhost时,响应为502 Bad Gateway。该应用程序本身和curl 127.0.0.1:5000从主机响应良好。

编辑2:我也尝试过这里找到的解决方案,但得到了nginx: [emerg] hostnot found in upstream "docker"。Docker是我的主机的主机名。

编辑3:我的docker-compose.yml

version: '3'
services:
  simple:
    build: ./simple
    container_name: simple
    ports:
      - 80:80
      - 443:443

我的Dockerfile:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

编辑:

我正在通过Linux中的“主机名”命令来获取计算机主机。


阅读 240

收藏
2020-07-02

共1个答案

一尘不染

问题在于0.0.0.0:5000。由于Nginx在docker内部运行,因此它尝试在docker机器内查找该地址,但由于在docker内部没有任何运行在0.0.0.0:5000上而失败。

所以为了解决这个

  1. 您需要为其提供一个可以到达的地址。要解决该问题,首先需要在主机上以0.0.0.0:5000运行您的应用程序,即您应该能够从浏览器以0.0.0.0:5000打开您的应用程序。
  2. 查找您的IP地址。 获得IP地址后,您应该可以通过 ip_address:5000 打开应用程序 由于您的泊坞窗和主机共享同一网络,因此也可以从泊坞窗访问此地址
  3. 现在,用此 ip_address:5000* 替换Nginx conf文件中的 0.0.0.0:5000 。您将能够为您的应用服务 *
2020-07-02