我错过了一个难题。通过
运行docker映像(例如在Linux EC2实例上)> sudo docker run -p 80:xyzw webapp_image:version
使容器在端口80上可访问,这意味着(通过EXPOSE xyzw
中的Dockerfile
)容器已影响了其主机。
这是否与Docker容器的前提相矛盾?就像虚拟化一样,这个想法似乎是容器在沙箱中运行并且无法影响其主机。但是在这里它能够将自己暴露在主机的端口上。这样做的事实是否违反了假定的隔离?是否应该不在主机的命令行上而不是从容器内部完成映射?假设您在同一主机上有两个容器,并且两个容器都尝试通过同一端口公开,那么可能会发生一些竞争,以查看谁先到达那里。还是确实可以观察到沙箱的想法,只是这里的映射发生在主机的命令行上?
答案 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。