2015-12-12 97 views
1

我正在嘗試設置一個nginx容器,作爲我安裝的另一個容器的代理。我想自動執行此設置,因爲我需要在多個服務器上部署類似的設置。爲此,我使用Ansible。使用Ansible在Docker中設置Nginx代理使用Ansible

這裏是我的nginx.conf

events { 
    worker_connections 1024; 
} 

http { 
    server { 
    listen 8080; 
    location/{ 
     proxy_pass http://192.168.1.14:9000; 
    } 
    } 
} 

這裏是我的Ansible YAML文件的相關部分:

- name: Install Nginx 
     docker: 
     name: nginx 
     image: nginx 
     detach: True 
     ports: 
      - 8080:8080 
     volumes: 
      - /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

當我第一次運行我的劇本,Nginx的運行,但不會綁定到8080如在這裏看到的:

6a4f610e86d nginx "nginx -g 'daemon off" 35 minutes ago Up Less than a second 80/tcp, 443/tcp nginx 

但是,如果我運行nginx容器直接:

docker run -d -v /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -p 8080:8080 nginx 

nginx的和我的代理服務器運行正常並監聽8080

c3a46421045c nginx "nginx -g 'daemon off" 2 seconds ago Up 1 seconds  80/tcp, 443/tcp, 0.0.0.0:8080->8080/tcp determined_swanson 

任何想法,爲什麼它的工作的一種方式而不是其他?

更新

每所選擇的答案中給出的指導下,我更新了我的YAML文件正是如此:

- name: Install Nginx 
    docker: 
    name: nginx 
    image: nginx 
    detach: True 
    ports: 
     - 8080:8080 
    expose: 
     - 8080 
    volumes: 
     - /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

回答

1

首先,你需要確保你的nginx的圖像EXPOSE 8080端口,和您可以直接在您的yaml文件中指定:

expose 
(added in 1.5) 

要爲端口映射或鏈接公開的其他容器端口的列表。如果端口已經在Dockerfile中使用EXPOSE公開,則不需要再次公開它。

然後,唯一的區別我看到考慮Ansible docker module時是該端口是雙引號內:

ports: 
    - "8080:9000" 

另外,如果你想prexypass到另一個容器在同一個碼頭工人守護進程,您可能需要使用鏈接而不是固定的IP地址。

links: 
    - "myredis:aliasedredis" 

這樣一來,你的nginx.conf包括固定的規則:

proxy_pass http://aliasedredis:9000; 
+0

謝謝 - 我繼續嘗試了引號,以確保公正,但它仍然沒有綁定到端口8080。任何其他想法? – Julio

+0

@Louis你需要確保你的nginx鏡像不會影響端口8080 – VonC

+0

Yup'expose'正是我所需要的。如果你想更新你的答案,我會接受它。 – Julio