Docker 链接容器

Docker 链接容器

我需要设置 nginx-proxy 容器以将请求转发到包含我的应用程序的容器。我使用以下命令来启动容器:

# app
docker run -d -p 8080:2368 \
  --name app \
  app

# nginx
docker run -d -p 80:8080 \
  --name nginx-proxy \
  jwilder/nginx-proxy

但是当我尝试访问服务器上的 80 端口时,我得到了ERR_CONNECTION_REFUSED。对我来说,很明显 nginx 容器转发的不是我想要的端口,因为在服务器端口 8080 上我可以访问该应用程序。我尝试使用network如下方法:

# network
docker network create -d bridge net

# app
docker run -d -p 8080:2368 \
  --name app \
  --network net \
  app

# nginx
docker run -d -p 80:8080 \
  --name nginx-proxy \
  --network net \
  jwilder/nginx-proxy

但结果似乎是一样的。我需要了解如何从服务器端口 80 向我的应用程序发出 nginx 容器代理请求。

答案1

您正在本地系统的端口 80 上公开 nginx 容器中的端口 8080。但根据此容器的文档,nginx 侦听的是容器内的端口。

# nginx
docker run -d -p 80:80 \
  --name nginx-proxy \
  --network net \
  jwilder/nginx-proxy

此外,您还需要配置 nginx 容器以连接到您的应用程序,例如如下所示(nginx 容器从其他容器上设置的环境变量中读取配置以构建其配置)

# network
docker network create -d bridge net

# app
docker run -d -p 8080:2368 \
  --name app \
  --network net \
  -e VIRTUAL_HOST=app.local \
  -e VIRTUAL_PORT=2368 \
  app

# nginx
docker run -d -p 80:8080 \
  --name nginx-proxy \
  --network net \
  -v /var/run/docker.sock:/tmp/docker.sock:ro \
  jwilder/nginx-proxy

相关内容