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
选项。
我 运行 在我的笔记本电脑上使用各种容器:
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
选项。