Nginx反向代理无法通过主机名访问Docker容器

时间:2019-10-31 14:55:55

标签: docker nginx docker-compose

Nginx反向代理无法访问Docker主机。在Amazon(EC2)上托管 我要加载不同的应用程序,具体取决于位置。

nginx.conf

server { 
 listen 80 ;
 server_name localhost;
 location /web {
  proxy_pass http://web:4000/;
 }}

位置有效,这意味着nginx图像构建正确。

docker-compose文件

services:
 web:
  image: web
  container_name: web
  ports:
   - 4000:4000
  hostname: web
  networks:
   - default
 nginx:
  image: nginx
  container_name: nginx
  ports:
   - 80:80                                                         
  depends_on:
  - web
  networks:
   - default
networks:
  default:
   external:
    name: my-network

我希望 -当我输入url / web时,它应该显示来自Docker容器的应用程序

我尝试过

  Run single container - works fine (web or nginx) 
  Added 127.0.0.1 web in /etc/hosts (I can do 'curl web' but it shows localhost response)
  Added index index.html in location section
  Added resolver in the location section
  Use links instead of network

当“ docker-compose up”时,我可以检查docker容器(网络)并查看IP-192.168.10.2。然后curl 192.168.10.2向我显示index.html。但是我无法使curl http://web:4000的主机名似乎无法访问,但是我认为在proxy_pass中使用IP是一个错误的决定。

1 个答案:

答案 0 :(得分:0)

我无法处理这些问题,因此我选择了另一种方法。

创建网络ipam

 docker network create --gateway 172.20.0.1 --subnet 172.20.0.0/24 ipam 

为docker-compose文件中的每个服务ipv4address分配了

networks:
  default:
    ipv4_address: 172.20.0.5 for web
where
networks:
   default:
    external:
      name: ipam

在我的Web docker映像中为目录/ var / www / html添加chmod

chmod -R 755 /var/www/html

(如果您在Windows docker下构建LINUX容器,似乎需要执行此附加步骤)