何时在docker中使用--hostname?

let*_*ive 36 docker

--hostname像搬运工容器环境域名系统,可以代替--ip引用其他容器中时?

BMi*_*tch 45

--hostname标志仅更改容器内的主机名.如果您的应用程序需要主机名的特定值,则可能需要这样做.它不会在docker之外更改DNS,也不会更改网络隔离,因此不允许其他人连接到具有该名称的容器.

您可以使用容器名称或容器(简称12个字符)id,使用docker的嵌入式dns从容器连接到容器,只要您在同一网络上有两个容器并且该网络不是默认网桥.

  • “使用容器的主机名或容器名进行连接”我认为这句话有点误导,因为正如您在容器的* hostname *(`--hostname`)之前无法解决的那样,但是*容器名称*(`--name`)和*容器ID *(如果省略`--hostname`,将用作主机名) (3认同)
  • @ user1885518完全同意这令人困惑.这意味着容器外的用户只能通过在容器上设置该值来解析主机名.在docker网络内部,有一个不同的DNS.但该声明至少对于当前版本的docker也是错误的,主机名不是作为网络别名添加的,只有容器ID和容器名称通过内部docker DNS解析. (3认同)

Ehu*_*Lev 12

如果您需要以同一网络中的其他容器可以看到的方式更改主机名,只需使用 --net-alias=${MY_NEW_DNS_NAME}

例如:

docker run -d --net-alias=${MY_NEW_DNS_NAME} --net=my-test-env --name=my-docker-name-test <dokcer-contanier>
Run Code Online (Sandbox Code Playgroud)

请参阅:overlay docker network 中 --link 和 --alias 的区别?


Nic*_*aid 11

这不是一个直接的答案,我只是想总结一些不太清楚的东西。

为了让容器能够相互通信,

  1. 创建非默认网络:

docker network create MyNetwork

  1. 在运行时将容器连接到该网络:

docker run --network MyNetwork --name Container1 Image1

docker run --network MyNetwork --name Container2 Image2

现在,如果Container1是在端口 80 上运行的 Web 服务器,则内部进程Container2将能够使用主机名Container1和端口 80来解析它

此外,如果 Container1 设置如下:

docker run --network MyNetwork --name Container1 -p 8080:80 Image1

然后

  • Container2可以访问Container1:80
  • 主机可以访问127.0.0.1:8080

这是从这里总结的https://jaaq.medium.com/making-docker-containers-talk-to-each-other-by-hostname-using-container-networking-94835a6f6a5b

您还可以使用以下命令确认容器已连接并检查其内部 IP 地址:

docker network inspect MyNetwork

  • 我认为如果您添加了“--hostname”参数(这个问题与此有关),您的示例可能会更具启发性。:) (3认同)

sha*_*hin 6

--hostname是可以与docker run将指定名称设置为容器主机名的命令一起提供的参数,而是--ip用于将特定ip地址(ipv4)设置到该特定容器的参数。

docker run --hostname test --ip 10.1.2.3 ubuntu:14.04 
Run Code Online (Sandbox Code Playgroud)

以下命令将创建一个Docker容器,其基本映像为ubuntu-14.04,主机名为test,容器ip地址为10.1.2.3