Docker Nginx禁用默认的暴露端口80

有没有办法禁用nginx泊坞窗文件中的默认EXPOSE 80 443指令,而不创build自己的图像?

我正在使用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 

我怎样才能禁用它?

这个expose instruction是在docker文件里面的,这个文件是由这个文件构build的。 您需要为此创build自己的自定义图像。

要完成这项工作:首先find官方nginx(库)的dockerfile ,

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

现在使用官方(自定义)dockerfilebuild立你自己的图像修改的图像。

要回答你编辑的问题:

Docker使用iptables,虽然您可以手动更新防火墙规则以使服务在特定端口不可用,但是您将无法解除绑定Docker代理。 所以端口80仍然会在docker主机和docker代理上被占用。

根据nginx的docker镜像configuration,你可以在容器开始传递一个环境variablesvar之前设置它:

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

见:

在nginxconfiguration中使用环境variables

那么在你的nginx中你可以设置:

 listen ${NGINX_PORT};