我正在尝试设置一个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正在运行,但未绑定(bind)到
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
最佳答案
首先,您需要确保nginx图像EXPOSE
的端口为8080,并且可以直接在ansible yaml文件中指定:
expose
(added in 1.5)
然后,在考虑Ansible docker module时,我看到的唯一其他区别是端口在双引号内:
ports:
- "8080:9000"
此外,如果要在同一docker守护程序中预先传递到另一个容器,则可能要使用链接而不是固定IP地址。
links:
- "myredis:aliasedredis"
这样,您的nginx.conf包含一个固定规则:
proxy_pass http://aliasedredis:9000;