1。docker --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
从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%数据包丢失
答案 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
提到的主机名存在,但在容器外部不是正确的。