是否有一种方法可以在不创建自己的映像的情况下禁用nginx文件中的默认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我怎么才能让它失效?
发布于 2016-11-01 11:19:56
expose instruction位于生成图像的停靠文件中。您需要为此创建您自己的自定义图像。
要完成工作:首先找到官方电子图书(图书馆)的官方电子图书(图书馆)
然后将dockerfile的expose指令编辑为443。
现在使用官方(自定义) dockerfile构建您自己的图像修改图像。
要回答您编辑过的问题:
Docker使用iptables,虽然您可以手动更新防火墙规则以使服务在某个端口不可用,但您无法解除对Docker代理的绑定。因此,端口80仍将在码头主机和码头代理上使用。
发布于 2016-11-01 11:26:56
根据nginx docker映像配置,可以在容器开始传递环境var之前设置此设置,如下所示:
docker run -itd -e NGINX_PORT=443 --name=nginx-test nginx见:
然后在你的nginx中你可以设置:
listen ${NGINX_PORT};发布于 2022-04-13 15:00:08
有一个解决办法来释放端口(但不是公开它)。我试图避免发布端口,但它没有工作,我得到了错误,因为por已经在使用无论如何。直到我发现诀窍是发布公开的端口,但映射到另一个端口。
让我举个例子来解释。
这仍将尝试使用端口80:
docker up -p 443:443但是这将使用443和其他你选择的随机端口
docker up -p 443:443 -p<some free port>:80您可以在命令、或ansible剧本中这样做,以便能够在同一台机器上启动多个实例。(例如: nginx,默认情况下公开端口80 )
我这样做是从码头-写作和ansible也。
https://stackoverflow.com/questions/40358923
复制相似问题