簡體   English   中英

使用Ansible在Docker中設置Nginx代理

[英]Setting up Nginx Proxy in Docker using Ansible

我正在嘗試設置一個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

首先,您需要確保EXPOSE映像EXPOSE 8080端口,並且可以直接在ansible yaml文件中指定:

expose
(added in 1.5)

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

然后,在考慮Ansible docker模塊時,我看到的唯一其他區別是端口在雙引號內:

ports:
    - "8080:9000"

此外,如果要在同一docker守護程序中預先傳遞到另一個容器,則可能要使用鏈接而不是固定IP地址。

links:
    - "myredis:aliasedredis"

這樣,您的nginx.conf包含一個固定規則:

proxy_pass http://aliasedredis:9000;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM