代码之家  ›  专栏  ›  技术社区  ›  Jimmix

docker run--name vs--hostname差异作为命令行选项(ping:错误地址)

  •  2
  • Jimmix  · 技术社区  · 6 年前

    1.两者的区别是什么 --name --hostname 码头工人 run

    2.为什么 foo 够不着 bar hostname = barhost

    创建网络和连接到该网络的两个容器:

    docker network create test
    docker run --rm -dit --name bar --network test --hostname barhost alpine:latest
    docker run --rm -it --name foo --network test --hostname foohost alpine:latest
    

    发出砰的声响 从…起 终端

    ping -c2 barhost
    

    给出结果:

    错误地址“barhost”

    但是平 酒吧 从…起

    ping -c2 bar
    

    PING bar(172.31.0.2):56个数据字节172.31.0.2中的64个字节:seq=0 ttl=64时间=0.260毫秒从172.31.0.2开始的64字节:seq=1 ttl=64时间=0.155

    3.如果你够不着 酒吧 主机名 从…起 为什么可以从内部做到这一点 酒吧 ?

    # assuming you've created network test from point 2.
    docker run --rm -it --name bar --network test --hostname barhost alpine:latest
    

    酒吧主人 酒吧 终端

    ping-c2主机
    

    是成功的:

    PING barhost(172.31.0.2):56个数据字节172.31.0.2中的64个字节: seq=0 ttl=64时间=0.135毫秒64字节,从172.31.0.2开始:seq=1 ttl=64 时间=0.127毫秒

    ---barhost ping统计---发送2个数据包,接收2个数据包,0%数据包丢失

    1 回复  |  直到 6 年前
        1
  •  9
  •   YK S    6 年前

    1.docker run命令中--name和--hostname的区别是什么?

    答复: docker run 命令docker创建一个容器并指定类型为的容器Id UUID 去吧。现在,可以使用此容器Id来引用创建的容器。但是记住这个容器Id可能很困难。

    所以我们可以使用 --name

    类似地,在创建docker容器时,主机名默认为docker中的容器ID。您可以使用 --hostname Docker docs .

    现在考虑一个场景,您通过代码使用DOCKER容器,并且您想引用DOCKER。因为Dock rid是在创建时生成的,所以您不能预先知道它,所以可以使用--name。要知道何时使用--hostname在docker中运行read from this stackoverflow post

    2.为什么foo无法通过其主机名=barhost访问bar?

    答复: above mentioned stackoverflow post 这个 --主机名 不会直接更改docker容器的主机名,以便从外部访问它。它的用例类似于为什么要使用 --名字

    3.如果您无法从foo通过其主机名访问bar,为什么可以从bar内部访问它?

    到目前为止,这个问题的答案必须是清楚的。在容器中,使用 存在,但在容器外部不是真的。