我需要将主机上的端口映射到容器上的端口。我可以通过运行"docker run"
带有该-p
选项的命令来实现。如何通过来实现这一目标Dockerfile
?使用以下给出"deprecated error"
EXPOSE 80:8080
我还能如何通过dockerfile公开暴露的端口?
你不能
究竟在Docker主机上发布哪些端口是本地管理员应做出的决定,而不是由他们试图运行的映像决定。这将是(a)一个安全问题(嘿,我刚刚打开了对您系统的ssh访问权限!),并且(b)容易出现故障(我的Web服务器容器无法在端口80上绑定,因为我已经在服务器上运行了服务器端口80)。
如果要避免使用较长的docker run
命令行,请考虑使用类似docker-
compose的方法
来自动执行该过程。然后,您可以通过docker-
compose一个类似的配置:
mywebserver:
image: myname/mywebserver
ports:
- 80:8080
然后简单地docker-compose up
将容器端口8080绑定到主机端口80来启动您的容器。
更新2017-03-11
针对Willa的评论:
使用docker-compose
不会解决端口冲突问题。端口冲突问题是映像不应该指定主机端口绑定的原因。我只是提供具有多个端口绑定的docker-compose
长docker run
命令行的替代方法。端口冲突问题可能会允许容器在您的主机上执行拒绝服务攻击:例如,如果某个容器启动并绑定到端口80,而不是主机(或另一个容器)中的Apache服务器,则您刚刚失去了Web服务。
关于安全性问题:如果映像能够指定主机端口绑定,则容器可能会在您不知情的情况下打开对容器的访问。如果内核中的命名空间功能无法完全隔离容器,并且即使您完全信任隔离也会打开主机,则允许远程用户访问主机上的容器可以使主机有可能遭受主机损害。如果该容器用于非法目的,可能会造成法律问题。无论哪种情况,这都是一个坏主意。
问题内容: 如何将UDP端口从Docker容器转发到主机? 问题答案: 使用-p标志并将后缀添加到端口号。 全指令 如果在Mac上运行boot2docker,请确保将boot2docker上的相同端口转发到本地计算机。 您还可以在以下位置暴露端口: 这是容器文档中包含更多Docker网络信息的链接:https : //docs.docker.com/config/containers/contai
问题内容: 我正在使用python-mosquitto订阅我的MQTT代理,该代理支持文件类型上传。从命令行在Mosquitto上使用- f标志可以很好地使用它。但是,当我从python脚本中进行操作时,我无法弄清楚如何使用client.publish(topic,有效负载)指定要发布的文件。 当我尝试向它扔一些奇怪的东西时,Python mosquitto给了我错误。我已经有一个文件存储在本地目
我知道如何发布json,我知道如何在Postman中以多部分形式发布文件。但我怎样才能同时做到这两件事呢。例如: 以下是我要发布的jason: 那么如何发布位于以及上面的json? 更新:请注意,我希望使用JSON发送文件,所以我的问题不同于使用Postman发送多部分表单。
我正在Azure管道中构建Docker映像。现在,我想根据配置参数将此映像推送到多个aws帐户(dev,阶段,prod)。问题是,图像在发布工件中不可用。我在研究过程中偶然发现了这篇和这篇文章。我对保存docker映像的解决方案感到困惑,这样它就可以在发布工件中使用。我有两个具体问题: 在docker生成后,我将如何在Azure管道任务中使用命令。可用的docker任务没有这个命令。 除了保存图像
问题内容: 我使用JSoup使用以下代码发布值: 现在我也要提交文件。就像带有文件字段的表单一样。这可能吗 ?如果比怎么? 问题答案: 从Jsoup 1.8.2(2015年4月13日)开始,通过新方法才支持此功能。 在旧版本中,不支持发送请求。最好的选择是为此使用一个值得使用的HTTP客户端,例如Apache HttpComponents Client 。最终,您可以获得HTTP客户端响应,以便可
我编写docker文件是为了运行jar文件,而它并没有创建日志文件,请参阅下面的控制台是我的docker文件