我有一个在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我得到:
- 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从主机响应良好。
502 Bad Gateway
编辑2:我也尝试过这里找到的解决方案,但得到了nginx: [emerg] hostnot found in upstream "docker"。Docker是我的主机的主机名。
nginx: [emerg] hostnot found in upstream "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中的“主机名”命令来获取计算机主机。
问题在于0.0.0.0:5000。由于Nginx在docker内部运行,因此它尝试在docker机器内查找该地址,但由于在docker内部没有任何运行在0.0.0.0:5000上而失败。
所以为了解决这个