Docker Nginx禁用默认暴露端口80

时间:2016-11-01 11:13:08

标签: nginx docker

有没有办法在不创建自己的图像的情况下禁用nginx docker文件中的默认EXPOSE 80 443指令?

我使用Docker Nginx图片并尝试以下列方式公开端口443:

docker run -itd --name=nginx-test --publish=443:443 nginx

但我可以看到使用docker ps -a容器也暴露了端口80:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                     NAMES
ddc0bca08acc        nginx               "nginx -g 'daemon off"   17 seconds ago      Up 16 seconds       80/tcp, 0.0.0.0:443->443/tcp              nginx-test

如何禁用它?

2 个答案:

答案 0 :(得分:1)

expose instruction位于构建图像的docker文件中。 您需要为此创建自己的自定义图像。

完成工作: 首先找到dockerfile

official nginx (library)

然后仅将dockerfile的expose指令编辑为443

现在使用官方(自定义)dockerfile构建您自己的图像修改图像。

回答您编辑过的问题:

Docker使用iptables,虽然您可以手动更新防火墙规则以使某个端口的服务不可用,但您将无法取消绑定Docker代理。因此,仍然会在docker主机和docker代理上使用端口80。

答案 1 :(得分:0)

根据nginx docker镜像配置,你可以在容器开始传递环境var之前设置它:

docker run -itd -e NGINX_PORT=443 --name=nginx-test nginx

见:

using environment variables in nginx configuration

然后在你的nginx中你可以设置:

listen ${NGINX_PORT};