docker 运行 --name 与 --hostname 区别作为命令行选项(ping:地址错误)
docker run --name vs --hostname difference as command line option (ping: bad address)
1.What是dockerrun
命令中--name
和--hostname
的区别吗?
2.Why 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
从 foo
终端
ping barhost
ping -c2 barhost
给出结果:
bad address 'barhost'
但是从 foo
ping bar
ping -c2 bar
成功:
PING bar (172.31.0.2): 56 data bytes 64 bytes from 172.31.0.2: seq=0
ttl=64 time=0.260 ms 64 bytes from 172.31.0.2: seq=1 ttl=64 time=0.155
ms
--- bar ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss
3.If 你不能通过它的 hostname
从 foo
到达 bar
为什么可以从 [=21] =]?
# 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 data bytes 64 bytes from 172.31.0.2:
seq=0 ttl=64 time=0.135 ms 64 bytes from 172.31.0.2: seq=1 ttl=64
time=0.127 ms
--- barhost ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss
1.What is the difference between --name and --hostname in docker run command?
答案:当我们使用docker run
命令时docker创建一个容器并为其分配一个UUID
类型的Container Id。现在这个 Container Id 可以用来引用创建的容器。但是记住这个 Container Id 可能很困难。
所以我们可以在docker 运行命令中使用--name
。现在您可以使用容器 ID 来引用创建的容器,也可以使用容器名称。
类似地,当创建 docker 容器时,主机名默认为 Docker 中容器的 ID。您可以使用 --hostname
覆盖主机名。我从 Docker docs.
中获取了这个
现在考虑这样一个场景,您正在通过代码使用 docker 容器并且您想要引用 docker。由于 docker rid 是在创建时生成的,因此您无法提前知道它,因此您可以使用 --name。要知道何时在 docker 运行 中使用 --hostname,请阅读
2.Why foo can't reach bar by its hostname = barhost ?
答案: 正如在 中指定的那样,--hostname
不会直接更改 docker 容器的主机名,这样就可以用于从外部访问它。它的用例类似于为什么要使用 --name
标志,即您期望某个值,否则该值会在创建容器时生成。
3.If you can't reach bar by its hostname from foo why it is possible to do that from within bar?
答案:这个问题的答案现在应该很清楚了。在容器内,使用 --hostname
提到的主机名存在,但在容器外并非如此。
1.What是dockerrun
命令中--name
和--hostname
的区别吗?
2.Why 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
从 foo
终端
barhost
ping -c2 barhost
给出结果:
bad address 'barhost'
但是从 foo
bar
ping -c2 bar
成功:
PING bar (172.31.0.2): 56 data bytes 64 bytes from 172.31.0.2: seq=0 ttl=64 time=0.260 ms 64 bytes from 172.31.0.2: seq=1 ttl=64 time=0.155 ms
--- bar ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss
3.If 你不能通过它的 hostname
从 foo
到达 bar
为什么可以从 [=21] =]?
# assuming you've created network test from point 2.
docker run --rm -it --name bar --network test --hostname barhost alpine:latest
从 bar
终端
barhost
ping -c2 barhost
成功:
PING barhost (172.31.0.2): 56 data bytes 64 bytes from 172.31.0.2: seq=0 ttl=64 time=0.135 ms 64 bytes from 172.31.0.2: seq=1 ttl=64 time=0.127 ms
--- barhost ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss
1.What is the difference between --name and --hostname in docker run command?
答案:当我们使用docker run
命令时docker创建一个容器并为其分配一个UUID
类型的Container Id。现在这个 Container Id 可以用来引用创建的容器。但是记住这个 Container Id 可能很困难。
所以我们可以在docker 运行命令中使用--name
。现在您可以使用容器 ID 来引用创建的容器,也可以使用容器名称。
类似地,当创建 docker 容器时,主机名默认为 Docker 中容器的 ID。您可以使用 --hostname
覆盖主机名。我从 Docker docs.
现在考虑这样一个场景,您正在通过代码使用 docker 容器并且您想要引用 docker。由于 docker rid 是在创建时生成的,因此您无法提前知道它,因此您可以使用 --name。要知道何时在 docker 运行 中使用 --hostname,请阅读
2.Why foo can't reach bar by its hostname = barhost ?
答案: 正如在 --hostname
不会直接更改 docker 容器的主机名,这样就可以用于从外部访问它。它的用例类似于为什么要使用 --name
标志,即您期望某个值,否则该值会在创建容器时生成。
3.If you can't reach bar by its hostname from foo why it is possible to do that from within bar?
答案:这个问题的答案现在应该很清楚了。在容器内,使用 --hostname
提到的主机名存在,但在容器外并非如此。