我是 CoreOS 和 Docker 的新手,我遇到了舰队问题。
我有一个启动 POSTGRES 容器的标准单元,我想知道启动该单元的机器的 IP 地址。我实际上有一个由 3 台机器组成的集群,并且 POSTGRES 单元并不总是在同一台机器上启动(这意味着 IP 不是静态的)。
当我启动另一个需要 POSTGRES 的单元(见下文)时,我需要它。
我目前正在使用名为 BindsTo 的单位参数:
[Unit]
Description=Test
After=docker.service
After=postgres@1.service
Requires=docker.service
Requires=postgres@1.service
BindsTo=postgres@1.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill test%i
ExecStartPre=-/usr/bin/docker rm test%i
ExecStart=/usr/bin/docker run -rm --name test%i -e HOST="HereThePostgresIP" sryther/test
ExecStop=/usr/bin/docker stop test%i
注意:这个单元不需要和 POSTGRES 单元在同一台机器上启动。
我尝试使用 %H 变量,但它返回主机名而不是机器的 IP 地址。
我的集群中也使用了法兰绒。
谢谢!
我找到了一种解决方法:
[Unit]
Description=Test
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill test%i
ExecStartPre=-/usr/bin/docker rm test%i
ExecStart=/usr/bin/docker run -rm --name test%i --link postgres1:postgres sryther/test
ExecStop=/usr/bin/docker stop test%i
并且 IP 地址在容器环境中设置为POSTGRES_PORT_5432_TCP_ADDR。