docker - docker run --name vs --hostname 作为命令行选项的区别(ping:错误地址)
问题描述
--name
1.docker命令和--hostname
in有什么区别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
从foo
终端ping
ping -c2 barhost
给出结果:
错误地址“barhost”
但 pingbar
从foo
ping -c2 bar
成功:
PING bar (172.31.0.2):56 个数据字节 64 个字节来自 172.31.0.2:seq=0 ttl=64 time=0.260 ms 64 个字节来自 172.31.0.2:seq=1 ttl=64 time=0.155 ms
--- bar ping 统计 --- 2 个数据包传输,2 个数据包接收,0% 丢包
3.如果你不能从它那里达到,bar
为什么可以从内部做到这一点?hostname
foo
bar
# assuming you've created network test from point 2.
docker run --rm -it --name bar --network test --hostname barhost alpine:latest
barhost
从bar
终端ping
ping -c2 barhost
成功:
PING barhost (172.31.0.2):56 个数据字节 64 个字节来自 172.31.0.2:seq=0 ttl=64 时间=0.135 ms 64 个字节来自 172.31.0.2:seq=1 ttl=64 时间=0.127 ms
--- barhost ping 统计 --- 发送 2 个数据包,接收 2 个数据包,0% 数据包丢失
解决方案
1.docker run命令中的--name和--hostname有什么区别?
答:当我们使用docker run
命令 docker 创建一个容器并为其分配一个 Container Id 类型UUID
。现在这个 Container Id 可以用来指代创建的容器。但是记住这个容器 ID 可能很困难。
所以我们可以--name
在 docker run 命令中使用。现在,您可以使用 Container Id 来引用创建的容器,也可以使用容器名称。
同样,当创建 docker 容器时,主机名默认为容器在 Docker 中的 ID。您可以使用覆盖主机名--hostname
。我从Docker 文档中获取了这个。
现在考虑一个场景,你通过代码使用 docker 容器并且你想引用 docker。由于 doke rid 是在创建时生成的,因此您无法提前知道它,因此您可以使用 --name。要知道何时在 docker run 中使用 --hostname ,请阅读此 stackoverflow 帖子
2.为什么 foo 不能通过它的 hostname = barhost 到达 bar ?
答:正如上面提到的 stackoverflow 帖子中所指定的,--hostname
它并没有真正改变 docker 容器的主机名,因此可以使用相同的主机名从外部访问它。它的用例类似于您为什么要使用--name
标志,即您期望某个值,否则在创建容器时会生成该值。
3.如果您无法通过 foo 的主机名访问 bar,为什么可以从 bar 中执行此操作?
答:这个问题的答案现在应该很清楚了。在容器内部,使用提到的主机名--hostname
存在,但在容器外部不存在。
推荐阅读
- html - 无法获取模型的值
- machine-learning - 远程监督:基于规则的标记方法?
- spring-boot - 出现 kafka 错误:MetadataRequest 版本早于 4 不支持 allowAutoTopicCreation 字段
- python - 使用 BeautifulSoup 和 pandas 保存和抓取多个页面
- java - 获取 Spring Boot 应用程序中的日志记录级别
- python - 在 Kedro 中哪里执行节点输出的保存?
- php - 当在 if 块中使用“addContent”时,sendgrid php api 不发送电子邮件
- ionic-framework - Image Lazy Loading Ionic 3 在我的项目中不起作用
- swift - 将数组 AB 中的元素附加到数组 A 中的每个元素
- amazon-web-services - 如何确定 Redis(已启用集群模式)复制组中的主端点