gpt4 book ai didi

docker - 如何在 docker 文件中发布端口?

转载 作者:IT老高 更新时间:2023-10-28 12:37:47 26 4
gpt4 key购买 nike

我需要将主机上的端口映射到容器上的端口。我可以通过运行带有 -p 选项的 "docker run" 命令来实现这一点。如何通过 Dockerfile 实现这一点?使用以下给出 "deprecated error"

EXPOSE 80:8080

我还能如何通过 dockerfile 公开暴露的端口?

最佳答案

你不能。在 docker 主机上发布哪些端口严格来说应该由本地管理员做出决定,而不是由他们试图运行的镜像决定;这将是 (a) 一个安全问题(嘿,我刚刚打开了对您系统的 ssh 访问权限!)和 (b) 容易发生故障(我的 webserver 容器无法绑定(bind)到端口 80,因为我已经在运行服务器端口 80)。

如果你想避免长 docker run 命令行,考虑使用类似 docker-compose使过程自动化。然后,您可以通过 docker-compose 配置如下:

mywebserver:
image: myname/mywebserver
ports:
- 80:8080

然后一个简单的 docker-compose up 将启动你的容器,容器端口 8080 绑定(bind)到主机端口 80。

2017 年 3 月 11 日更新

回应薇拉的评论:

  • 使用 docker-compose 无助于解决端口冲突问题。端口冲突问题是图像不能指定主机端口绑定(bind)的一个原因。我只是提供 docker-compose 作为具有多个端口绑定(bind)的长 docker run 命令行的替代方案。端口冲突问题可能会允许容器对您的主机执行拒绝服务攻击:例如,如果一个容器在您的主机(或另一个容器)上的 Apache 服务器之前启动并绑定(bind)到端口 80,那么您刚刚失去了网络服务。

  • 关于安全问题:如果图像能够指定主机端口绑定(bind),则容器可能会在您不知情的情况下打开对容器的访问。如果内核中的命名空间功能无法完全隔离容器,即使您完全信任隔离,它也会让您打开主机损坏的可能性如果该容器被用于非法目的,则可能引发法律问题。无论哪种情况,这都是个坏主意。

关于docker - 如何在 docker 文件中发布端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32740344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com