Docker的EXPOSE是否不会违反假定的沙箱?

时间:2018-08-16 12:27:04

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

我错过了一个难题。通过

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

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

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

2 个答案:

答案 0 :(得分:0)

  

如何将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规则。

答案 1 :(得分:0)

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