【问题标题】:Does Docker's EXPOSE not breach the supposed sandboxing?Docker 的 EXPOSE 不会破坏所谓的沙盒吗?
【发布时间】:2018-08-20 03:49:16
【问题描述】:

我错过了一块拼图。通过

运行 docker 镜像(比如在 Linux EC2 实例上)
> sudo docker run -p 80:xyzw webapp_image:version

使 container 可在端口 80 访问,这意味着(通过 Dockerfile 中的 EXPOSE xyzw)容器已影响其主机。

这不与 Docker 容器的前提相矛盾吗?就像虚拟化一样,这个想法似乎是容器在沙箱中运行并且无法影响其主机。然而在这里它能够在主机的端口上暴露自己。这是可行的事实是否违反了所谓的隔离?映射不应该在主机的命令行上完成,而不是在容器内完成吗?假设您在同一主机上有两个容器,并且都尝试通过同一个端口公开,那么可能会发生一些竞赛,看谁会先到达那里。还是确实观察到沙盒的想法,只是这里的映射发生在主机的命令行上?

【问题讨论】:

  • 什么不起作用?您似乎已经描述了所有关键部分。
  • @DavidMaze 我不确定自己了。让我重新提出这个问题。

标签: amazon-web-services http docker amazon-ec2


【解决方案1】:

如何将 EC2 实例的端口 80 路由到 EC2 实例的端口 80 容器?

如果我理解上下文,您可以通过运行以下命令来执行此操作 -
$ sudo docker run -p 80:80 webapp_image:version

这会将主机的 80 端口路由到容器的 80 端口。

在此之后,您需要在 EC2 实例的安全组中打开端口 80,如果仍然无法正常工作,请按照检查点进行操作 -
1.主机上的防火墙,如iptables、selinux等
2. 在 AWS 中验证 EC2 实例安全组。
3. 验证 AWS 中子网的 NACL 规则。

【讨论】:

    【解决方案2】:

    您是否在 Docker 文件中添加了这一行 EXPOSE 80?如果是,则运行docker run -p 80:80 webapp_image:version。 -p 80:80 选项将容器上暴露的 80 端口映射到主机 (EC2) 上的端口 80。

    【讨论】:

    • 无论您是否在 Dockerfile 中公开某些内容,在这里都完全没有区别。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 2011-08-16
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多