Docker 将nginx容器设置为其他应用程序的代理

Docker 将nginx容器设置为其他应用程序的代理,docker,nginx,proxy,Docker,Nginx,Proxy,我正在尝试设置一个nginx容器,该容器将显示在“http://server_ip/在nginx html页面上设置路径,在“/app”路径上设置tutum/hello-world容器。作为后续行动,希望能够仅从“hello world”访问“hello world”容器http://server_ip/app“路径而非通道http://server_ip:1500. 我创建了以下docker compose: version: '3' services: proxy: conta

我正在尝试设置一个nginx容器,该容器将显示在“http://server_ip/在nginx html页面上设置路径,在“/app”路径上设置tutum/hello-world容器。作为后续行动,希望能够仅从“hello world”访问“hello world”容器http://server_ip/app“路径而非通道http://server_ip:1500.

我创建了以下docker compose:

version: '3'
services: 
  proxy:
    container_name: proxy
    image: nginx
    ports:
      - "80:80"
    volumes:
      - $PWD/html:/usr/share/nginx/html
      - $PWD/config/nginx.conf:/etc/nginx/conf.d/nginx.conf
    networks: 
      - backend
  webapp:
    container_name: webapp
    image: tutum/hello-world
    ports: 
      - "1500:80"
    networks: 
      - backend
networks: 
  backend:
然后我有以下nginx.conf文件:

server {
    listen 80; # not really needed, but more informative
    location = / {
        root /usr/share/nginx/html;
    }
    location = /app/ {
        proxy_pass http://localhost:1500/;
    }
}
如果我试着通过他们的http://server_ip:PORT,我到了那里。如果我尝试http://server_ip/app 我得到“404未找到”。我错过了什么?我把conf文件放错文件夹了吗?如何将“hello world”的可用性限制为仅限于“http://server_ip/app“路径而非通过”http://server_ip:1500“

您的容器使用“后端”docker网络,如您在撰写文件中所述。 在内部,它们通过服务名称相互联系,因此通过“代理”服务,您可以在上访问“webapp”服务http://webapp (或http://webapp:80)通过“webapp”服务,您可以在http://proxy 或(http://proxy:80)

如果您键入http://localhost:1500/ 您将访问webapp服务,如果您键入http://localhost:80/ 您将访问代理服务。 端口映射1500:80表示您的计算机1500端口映射到webapp容器80端口

因此,在nginx.conf中执行以下操作:

proxy_pass http://webapp:80/;
另外,如果要使您的webapp无法从localhost:1500上的主机访问,请删除webapp服务规范中的端口部分:

version: '3'
services: 
  proxy:
    container_name: proxy
    image: nginx:1.11
    ports:
      - "80:80"
    volumes:
      - $PWD/html:/usr/share/nginx/html
      - $PWD/nginx.conf:/etc/nginx/conf.d/default.conf
    networks: 
      - backend
  webapp:
    container_name: webapp
    image: tutum/hello-world
    networks: 
      - backend
networks: 
  backend:

这没什么用。我知道,由于它们位于同一个compose文件中,它们可以通过DNS“看到”彼此,但我正在尝试将“正确的url”设置为到达该文件的url,而不是“您想从右侧的计算机浏览器访问webapp吗?是的。但是我不确定我的
conf
文件写得是否正确,也不确定我是否将其安装在了正确的位置我明白了,好的,所以我关于nginx配置行的回答是正确的,您必须这样做。OTOH您的卷映射是错误的,因为您不能像您尝试的那样装载文件(我甚至不确定这是否可能)。你可以像装载html一样装载目录,请参见答案中的“我的更新”。不完全确定为什么装载文件夹而不是文件本身修复了它,但它可以工作。另一方面,您可以根据