Docker 本地主机 IP

Docker localhost IP

我 运行 在我的笔记本电脑上使用各种容器:

X1C3:~$ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
4daccb82531d        prom/prometheus:latest   "/bin/prometheus -con"   12 hours ago        Up 12 hours         0.0.0.0:9090->9090/tcp   berserk_goldstine
32c2c31e0d5f        prom/blackbox-exporter   "/bin/go-run -config."   12 hours ago        Up 12 hours         0.0.0.0:9115->9115/tcp   goofy_wescoff
7490523a3bc7        prom/node-exporter       "/bin/go-run"            2 days ago          Up 2 days                                    sharp_albattani
61303633672b        prom/alertmanager        "/bin/go-run -config."   2 days ago          Up 2 days           0.0.0.0:9093->9093/tcp   goofy_kare
89ce4f49c426        grafana/grafana          "/usr/sbin/grafana-se"   2 days ago          Up 2 days           0.0.0.0:3000->3000/tcp   berserk_wozniak

并且至少从其中一个容器,prom/prometheus我需要与其他容器通信。

例如这里是一个典型的配置:

global:
 scrape_interval: 10s
 evaluation_interval: 10s
scrape_configs:
 - job_name: 'prometheus'
   target_groups:
    - targets:
      - localhost:9090
      - 192.168.88.161:9100
 - job_name: 'blackbox'
   metrics_path: /probe
   params:
     module: [icmp]
     target: [8.8.8.8]
   target_groups:
     - targets:
       - 192.168.88.161:9115

我发现我需要指定 192.168.88.161 因为 localhost 不起作用。我猜是因为 localhost 似乎是该容器的本地主机。然而,192.168.88.161 令人讨厌的方面是它只是我在家时的 IP。我的 IP 变了 因为我四处走动,所以一直在变。那么如何处理这个问题呢?

我推测使用 X1C3.local 但我没有看到没有跨容器工作的 bonjour 发现工作(怀疑!)

如果您正在使用 docker-machine and docker 1.9, the new way to reference container would be through a discovery service, like, for instance consul, coupled with an inspector service like registrator

另一种类似的方法是使用swarm来管理这些服务(仍然与consul结合使用)

在所有情况下,这意味着至少还有两个容器(一个用于 consul master,一个用于检查,如 swarm master 或 registrator)。
参见“What is the different between putting a separate service discovery and integrate it into the cluster machine in Docker Swarm”。

--link 相比的优势在于您可以按任何顺序启动容器,它们可以停止并重新启动,而且它们仍然相互可见。
--link 意味着您 link 的容器必须首先启动,它停止并重新创建,--link 将不再有效。

发现服务方法也适用于本地主机或多个主机。 (--link 只能在本地工作,不能跨主机工作)

我现在开始做的是在我的 /etc/prometheus.yml 中使用 localhost,并在所有服务上使用 docker run--net=host 选项。