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

Jim*_*mix 3 networking ping command-line-interface docker docker-run

1. --name--hostnamedocker run命令有什么区别?

2.为什么foo不能通过barhostname= 到达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
Run Code Online (Sandbox Code Playgroud)

barhostfoo终端ping

ping -c2 barhost
Run Code Online (Sandbox Code Playgroud)

给出结果:

错误的地址“ barhost”

但是barfoo

ping -c2 bar
Run Code Online (Sandbox Code Playgroud)

成功:

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 ms

--- bar ping统计信息---传输2个数据包,接收2个数据包,0%数据包丢失

3.如果您不能达到barhostnamefoo为什么它是可以做到从内bar

# assuming you've created network test from point 2.
docker run --rm -it --name bar --network test --hostname barhost alpine:latest
Run Code Online (Sandbox Code Playgroud)

barhostbar终端ping

ping -c2 barhost
Run Code Online (Sandbox Code Playgroud)

成功:

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 ms

--- barhost ping统计信息---传输2个数据包,接收2个数据包,0%数据包丢失

Yug*_*ngh 6

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

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

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

同样,在创建Docker容器时,主机名默认为Docker中容器的ID。您可以使用覆盖主机名--hostname。我已经从Docker docs中获取了这个。

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

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

回答:如在指定的上述计算器张贴--hostname不真正地改变,使得相同的可用于从外部访问它搬运工容器中的主机名。它的用例类似于为什么要使用--name标志,即您期望某个值,否则将在容器创建时生成该值。

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

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