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

时间:2018-12-23 22:05:16

标签: docker networking command-line-interface ping docker-run

1。docker --name命令中的--hostnamerun有什么区别?

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

barhost终端ping foo

ping -c2 barhost

给出结果:

  

不良地址“ barhost”

但从bar ping foo

ping -c2 bar

成功:

  

PING条(172.31.0.2):56个数据字节从172.31.0.2起的64个字节:seq = 0   ttl = 64时间= 0.260 ms来自172.31.0.2的64字节:seq = 1 ttl = 64时间= 0.155   毫秒

     

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

3。如果您无法通过bar的{​​{1}}到达hostname,为什么可以在foo内做到这一点?

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

ping barhost

bar

成功:

  

PING barhost(172.31.0.2):56个数据字节来自172.31.0.2的64个字节:   seq = 0 ttl = 64时间= 0.135 ms来自172.31.0.2的64字节:seq = 1 ttl = 64   时间= 0.127毫秒

     

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

1 个答案:

答案 0 :(得分:5)

  

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

答案::当我们使用docker run命令时,docker将创建一个容器并为其分配一个UUID类型的Container ID。现在,可以使用此容器ID来引用创建的容器。但是记住此容器ID可能很困难。

因此我们可以在docker run命令中使用--name。现在,您可以使用“容器ID”来引用创建的容器,也可以使用相同的容器名称。

类似地,在创建Docker容器时,主机名默认为Docker中容器的ID。您可以使用--hostname覆盖主机名。我是从Docker docs那里拿走的。

现在考虑一个场景,在该场景中,您将通过代码使用Docker容器,并且想要引用docker。由于docke rid是在创建时生成的,因此您无法事先知道它,因此可以使用--name。要知道何时在docker run中使用--hostname,请阅读this stackoverflow post

  

2。为什么foo无法通过其主机名= barhost到达bar?

答案:根据above mentioned stackoverflow post中的说明,--hostname并没有从字面上更改Docker容器的主机名,因此可以从外部使用它来访问它。它的用例类似于为什么要使用--name标志,即您期望某个值,否则将在容器创建时生成该值。

  

3。如果您无法通过foo的主机名访问bar,为什么可以在bar内部进行访问呢?

答案:目前,答案必须很明确。在容器内部,使用--hostname提到的主机名存在,但在容器外部不是正确的。