【问题标题】:docker networking - host mode vs bridge mode - port mappingdocker 网络 - 主机模式与桥接模式 - 端口映射
【发布时间】:2020-05-18 19:03:33
【问题描述】:

在生产中,建议使用host 模式联网而不是bridge 模式以避免数据包转发开销。

$ docker container run --help | grep "network"
      --network network                Connect a container to a network
      --network-alias list             Add network-scoped alias for the container

Cloudformation 资源类型AWS::ECS::TaskDefinition 选项(NetworkMode) 内部使用决定启动docker容器的网络模式,它说:

如果网络模式为host,当使用端口映射时,您不能在单个容器实例上运行同一任务的多个实例化。


使用AWS::ECS::TaskDefinition

正在启动主 jenkins(docker 容器)的单个实例,端口映射为 8080:8080。 EC2 8080 端口与容器 8080 端口映射。


这是什么意思? 当使用端口映射时,不能在单个容器实例上运行同一任务的多个实例化....

【问题讨论】:

    标签: docker jenkins amazon-cloudformation amazon-ecs lxc-docker


    【解决方案1】:

    当您使用network mode 作为主机时,容器共享主机的网络命名空间,如here 所述,因此端口映射不会生效。这意味着您不能将容器的 8080 端口映射到主机的 80 端口,因为当容器暴露 8080 端口时,它将直接在主机的 8080 端口上可用。

    不能在单个任务上运行同一任务的多个实例化 使用端口映射时的容器实例......

    容器实例基本上是一种特殊类型的 EC2 实例,如 here 所述。这意味着如果您在同一主机(容器实例)中运行同一任务的 1 个以上实例,它们将公开相同的端口(例如 8080),该端口又直接映射到主机上的同一端口,因此导致冲突。

    【讨论】:

    • 知道了...所以,我将在 EC2 上运行主 Jenkins 容器的实例,并且不需要映射端口。是不是
    • 是的,没错,因为您使用的是主机网络。这些端口映射无论如何都不会生效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多