在命令行选项中使用“--name”和“--hostname”的区别(ping:bad address)的Docker运行。

9

1.--name--hostname在docker run命令中有何不同?

--name为容器指定一个名称,方便后续操作时使用。而--hostname则是设置容器的主机名。

2.为什么foo无法通过其hostname=barhost访问bar

创建网络并连接两个容器:

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

foo终端机pingbarhost

ping -c2 barhost

返回结果:

地址错误'barhost'

但是从foo ping bar

ping -c2 bar

操作成功:

PING bar (172.31.0.2): 56 字节的数据包 64 字节来自 172.31.0.2: icmp_seq=0 ttl=64 时间=0.260 ms 64 字节来自 172.31.0.2: icmp_seq=1 ttl=64 时间=0.155 ms

--- bar ping 统计 --- 已传输 2 个数据包,收到 2 个,丢失 0%。

3.如果无法从 foo 使用 hostname 访问 bar,为什么可以从 bar 内部进行访问?

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

bar终端ping barhost

ping -c2 barhost

操作成功:

PING barhost(172.31.0.2): 56 数据字节 64 字节来自 172.31.0.2: seq=0 ttl=64 time=0.135 毫秒 64 字节来自 172.31.0.2: seq=1 ttl=64 time=0.127 毫秒

--- barhost ping 统计数据 --- 已传输 2 个数据包, 接收到 2 个数据包,丢失率 0%

1个回答

10

1.在docker运行命令中,--name和--hostname有什么区别?

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

因此,在docker运行命令中,我们可以使用--name。现在,您可以使用容器ID或容器名称引用相同的容器。

类似地,当docker容器创建时,主机名默认为Docker中的容器ID。您可以使用--hostname覆盖主机名。我从Docker文档中获取了这些信息。

现在考虑一种情况,您正在通过代码使用docker容器,并且想要引用docker。由于docke rid是在创建时生成的,因此无法提前知道它,因此可以使用--name。要了解何时在docker run中使用--hostname,请从此stackoverflow帖子中阅读。

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

回答:正如在上述提到的stackoverflow帖子中所指定的那样,--hostname并未真正更改docker容器的主机名,以便可以从外部访问它。其使用情况类似于为什么要使用--name标志,即您期望某个值,否则该值会在容器创建时生成。

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

回答:现在可以清楚地回答这个问题了。在容器内部,使用--hostname指定的主机名存在,但在容器外部却不是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接