2017-08-16 47 views
0

(我知道在别人面前问这个问题,但我不能够解决使用其他职位提出的解决方案的问题,所以我想我将尝试发布我的配置文件,看看是否有人可以帮助。)泊坞窗:proxy_pass到另一个容器 - nginx的:主机在上游未发现

我想为nginx创建一个容器,并使用proxy_pass将请求传递到正在运行的Web应用程序的容器。我无法弄清楚如何在两个容器之间进行通信。当我尝试运行docker stack deploy -c docker-compose.yml somename时,只有Web容器启动。 nginx容器无法启动,并且停留在尝试重新启动的循环中。这是日志的消息,我得到:

2017年8月16日14时56分10秒[EMERG] 1#1:主机在上游没有发现 “网络:8000” 在/ etc/nginx的/ conf目录 。 d/nginx.conf:2 nginx的:[EMERG]在 上游未找到主机 “网络:8000” 中/etc/nginx/conf.d/nginx.conf:2

我找到答案,作为只要您在docker-compose.yml文件中使用与服务相同的名称,nginx就会找到该变量。但是,这似乎没有帮助我的情况。

如何像这样不同的容器之间的沟通工作? 'web'变量在哪里

我见过的大多数例子都在docker-compose.yml文件中使用version: "2",这应该有所作为吗?

我的搬运工,compose.yml:

version: "3" 
services: 
    web: 
    image: user/repo:web 
    deploy: 
     resources: 
     limits: 
      cpus: "0.1" 
      memory: 50M 
     restart_policy: 
     condition: on-failure 
    ports: 
     - "8000:80" 
    networks: 
     - webnet 

    nginx: 
    image: user/repo:nginx 
    ports: 
     - 80:80 
    links: 
     - web:web 
    depends_on: 
     - web 

networks: 
    webnet: 

Nginx的配置:

upstream docker-web { 
    server web:8000; 
} 


server { 
    listen 80; 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    location/{ 
     proxy_pass http://docker-web; 

     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Host $server_name; 
    } 
} 

回答

0

那么你可以做到这一点通过编辑/etc/hosts中文件并添加为您的虚拟主机正确的入口

1.1.1.1 web 

Obviouslly你必须与Web服务器的真实IP地址(私有一个我想)来代替1.1.1.1。保存该文件并重试。另一种解决方法是在配置更换:

upstream docker-web { 
    server web:8000; 
} 

upstream docker-web { 
    server web-ip-address:8000; 
} 

如果你会去第二次,不要忘记重启/重装nginx的!

0

我想通了,如何解决这个问题。得到了一些帮助,以解决docker-compose.yml,所以它看起来是这样的:

泊坞窗 - 撰写 - 阳明:

version: "3" 
services: 
    web: 
    image: user/repo:web 
    deploy: 
     resources: 
     limits: 
      cpus: "0.1" 
      memory: 50M 
     restart_policy: 
     condition: on-failure 
    ports: 
     - "8000:80" 
    networks: 
     main: 
      aliases: 
       - web 


    nginx: 
    image: user/repo:nginx 
    ports: 
     - 80:80 
    links: 
     - web:web 
    depends_on: 
     - web 
    networks: 
     main: 
      aliases: 
       - nginx 
networks: 
    main: 

这个nginx的容器居然跑后,但仍不能连接到的web容器。发现我能同时使用curl webcurl web -p 8000从网站得到的页面,从nginx的容器内。然后,我改变了上游在我nginx.conf从这个

upstream docker-web { 
    server web:8000; 
} 

这样:

upstream docker-web { 
    server web; 
}