有没有办法在不创建自己的图像的情况下禁用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
如何禁用它?
答案 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};