【问题标题】:How to set docker container hostname/IP permanently?如何永久设置 docker 容器主机名/IP?
【发布时间】:2016-02-17 19:53:17
【问题描述】:

有没有办法在 docker 中为容器永久设置主机名和 IP? 我想在一个虚拟机中创建一堆机器(容器),理想情况下使用主机名相互通信。

【问题讨论】:

  • 你想完成什么?如果您正在尝试这样做,我建议您以错误的方式考虑容器。
  • 我想设置一堆机器来运行一个 webapp。说 2 台 mariadb 机器,nginx,一台带有 jvm,kakfa,zookeeper,一台用于 logparser 等。目前该设置在 vmware 中作为 12-14 个虚拟机运行。是否可以将这些虚拟机作为容器运行?
  • 是的。但是你最好使用端口映射——也许使用 haproxy——而不是尝试静态配置你的容器。
  • 是的,这是一个错误的假设。
  • 当我问这个问题时,我并不知道我当时在做什么。

标签: docker


【解决方案1】:

您可以使用 Docker 版本 1.10.0 之后提供的新网络功能

这允许您通过容器名称连接到容器、分配 IP 地址和主机名。

当您创建一个新网络时,连接到该网络的任何容器都可以通过其名称、IP 或主机名访问其他容器。

即:

1) 创建网络

$ docker network create --subnet=172.18.0.0/16 mynet123       

2) 在网络内创建容器

$ docker run --net mynet123 -h myhostname --ip 172.18.0.22 -it ubuntu bash

标志:

  • --net 将容器连接到网络
  • --ip 指定 IPv4 地址
  • -h, --hostname 指定主机名
  • --add-host 向 /etc/hosts 添加更多条目

【讨论】:

  • 你真的需要--ip 标记吗?
【解决方案2】:

您可以使用docker-compose 工具创建具有特定主机名和地址的容器堆栈。

这是带有特定网络配置的示例docker-compose.yml

version: "2"
services:
  host1:
    networks:
      mynet:
        ipv4_address: 172.25.0.101
networks:
  mynet:
    driver: bridge
    ipam:
      config:
      - subnet: 172.25.0.0/24

来源:Docker Compose static IP address in docker-compose.yml

下面是 docker-compose.yml 文件的示例,其中容器相互 ping:

version: '3'
services:
  ubuntu01:
    image: bash
    hostname: ubuntu01
    command: ping -c1 ubuntu02
  ubuntu02:
    image: bash
    hostname: ubuntu02
    command: ping -c1 ubuntu01

使用docker-compose up 运行。

【讨论】:

  • 这不会自动将主机添加到您的其他实例。例如。 ubuntu02 不会有 ubuntu01 主机,反之亦然。
  • 此答案用于添加主机名,而不是添加主机(如 /etc/hosts 中)。所以它对我有用,因为我正在寻找更改主机名。主机是使用extra_hosts 添加的
猜你喜欢
  • 2022-06-15
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
相关资源
最近更新 更多