2017-08-16 46 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; 
}