【问题标题】:Is it possible to set docker port mappings to host in Dockerfile?是否可以将 docker 端口映射设置为在 Dockerfile 中托管?
【发布时间】:2016-03-22 11:20:17
【问题描述】:

我正在使用多机 Vagrant 设置,其中一个 VM 是一个 docker 主机,它运行一些使用自定义 Dockerfile 构建的容器。

每个容器都是不同的,并且会向主机公开一些端口。是否可以直接在 Dockerfile 中强制进行端口映射,而不必使用 docker run -p 命令设置映射?

例如,在 Dockerfile 中我有:

EXPOSE 8080

如果我使用docker run -P 运行容器,docker 会在主机中的随机端口上发布 8080 端口(这在我的特定情况下是无用的)。我可以强制 docker 在主机上的指定 Y 端口上发布 X 端口,而不必运行自定义的docker run -p Y:X 命令吗?

【问题讨论】:

  • 您的部署脚本可以检查镜像的端口并将必要的 -p 选项传递给运行命令。
  • @IgorBukanov:但我在 Vagrant 中使用 Docker 配置器,它有一个直接的“docker run”方法。添加执行所需操作的部署脚本会使 Vagrant 的便利性无效。

标签: networking docker vagrant dockerfile


【解决方案1】:

docker run --net=host ...可能解决你的问题,但一般是不可能的。

【讨论】:

    【解决方案2】:

    它不是无用的,它是设计使然。您可以同时运行一个容器多次。如果映射是 dockerfile 的一部分,您将 a) 无法控制如何跨队列(负载均衡器)管理此端口 b) 在尝试绑定到同一主机端口的多个实例上存在冲突 c) 一堆其他问题.

    答案是否定的。

    【讨论】:

    • 在我的具体情况下,我的意思是“无用”。显然,随机端口在其他情况下很有用。问题是,在我的 Vagrant/Docker 部署中,我无法先验地知道容器将绑定哪些端口,并且我无法在已设置网络的情况下拥有 Vagrantfile。
    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2016-10-08
    • 2018-11-24
    • 2022-01-25
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多