我错过了一 block 拼图。通过
运行 docker 镜像(比如在 Linux EC2 实例上)> sudo docker run -p 80:xyzw webapp_image:version
使 容器 可在端口 80 访问,这意味着(通过 Dockerfile
中的 EXPOSE xyzw
)容器已影响其主机。
这与 Docker 容器的前提不矛盾吗?这个想法,就像虚拟化一样,似乎是容器在沙箱中运行并且无法影响其主机。然而在这里它能够在主机的端口上暴露自己。这是可行的事实是否不会违反假定的隔离?映射不应该在主机的命令行上完成,而不是在容器内完成吗?假设您在同一台主机上有两个容器,并且都尝试通过同一个端口公开,那么可能会发生一些竞赛,看谁先到达那里。或者是确实观察到沙盒的想法,只是这里的映射发生在主机的命令行上?
最佳答案
How do I route port 80 of the EC2 instance to port 80 of the container?
如果我理解上下文,您可以通过运行以下命令来执行此操作 -
$ sudo docker run -p 80:80 webapp_image:version
这会将主机的 80 端口路由到容器的 80 端口。
在此之后,您需要在 EC2 实例的安全组中打开端口 80,如果它仍然无法正常工作,请按照检查点进行操作 -
1.主机上的防火墙,如iptables、selinux等
2. 验证AWS中的EC2实例安全组。
3. 验证 AWS 中子网的 NACL 规则。
关于amazon-web-services - Docker 的 EXPOSE 不会破坏所谓的沙箱吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51877069/