我在localhost上运行nodejs,而nginx作为docker容器使用docker-compose运行。
我无法与node js应用程序建立任何连接。
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
http {
server {
listen 80;
server_name licensing.cluster-ops.co;
location / {
proxy_pass http://md_license_server:3005;
proxy_set_header Host $host;
docker-compose.yml
version: "3.3"
services:
md_license_server:
image: root/md-license-server
expose:
- 3005
ports:
- 3005:3005
nginx:
image: nginx:latest
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /etc/ssl/certs:/etc/ssl/certs
- /etc/ssl/private:/etc/ssl/private
- /root/docker/nginx.conf:/etc/nginx/nginx.conf
我尝试了外面的一切。
extra_hosts:
- "host.docker.internal:127.0.0.1"
这是不可能的。
node应用在localhost上工作得非常好。我试着做了一些curl的调用,响应很好。
这是我从docker得到的错误信息。
2021/12/06 14:29:06 [error] 24#24: *3 connect() failed (111: Connection refused)
while connecting to upstream, client: 139.59.147.204, server:
localhost, request: "GET /ping HTTP/1.1", upstream: "http://172.19.0.2:3005
/ping", host:...
看起来,"172.19.0.2:3005 "是md_license服务的IP。
docker-compose exec md_license_server curl http://localhost:3005/ping
returns true
这意味着节点服务器在容器内工作。
我觉得这是关于nginx的问题。
很可能你的IP范围在docker网络和主机网络之间有重叠。但我们现在不要假设。
如果你使用的是桌面版的Docker(Windows,Mac) ,不需要添加额外的主机。直接使用。
upstream backend { server host.docker.internal:3005;
如果你没有使用Docker for Desktop (Linux),你需要检查你的主机
的私有IP,然后把这个私有IP放到nginx配置中。hostname -i