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};