docker – 如何在机器上启动单元的IP地址并在另一个单元中使用它?

我是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.

最佳答案
我在我的舰队环境中使用registrator进行发现.当我启动我的舰队时,我修改了cloud-config文件,还包括registrator(以及etcd,flannel,fleet等). Regender驻留在docker上并识别新容器何时启动/终止/停止. Registrator管理已发现容器的数据库,它有多种形式(如consul,skydns).我配置我的skydns模式运行.所以,这里有一个例子,我用一个单元文件启动我的postgres服务器,我不知道它将在哪里着陆:

[Unit]
Description=Postgres
After=docker.service
Requires=flanneld.service docker.service etcd.service

[Service]
Restart=always
ExecStartPre=-/usr/bin/env docker kill postgresql
ExecStartPre=-/usr/bin/env docker rm postgresql
ExecStartPre=/usr/bin/env docker pull sameersbn/postgresql:9.4
ExecStart=/usr/bin/docker run --name postgresql sameersbn/postgresql:9.4
ExecStop=-/usr/bin/docker stop postgresql

当postgres开始时,我使用postgres条目更新了etcd:

/skydns/net/tacodata/postgresql/aup1:postgresql:5432

如果我拿那个,我’;;看到ip和端口:

$etcdctl get /skydns/net/tacodata/postgresql/aup1:postgresql:5432
{"host":"10.1.43.5","port":5432}

您可以修改您的应用程序来执行此操作.或者,您可以运行容器skydns,它会自动为您更新dns,因此您拥有SRV记录和A记录.在我的安装中,我使用了一个名为tacodata.net的测试域,因此,在postgresql出现后,我有dns记录!

root@f7e403be967a:/# host -t srv postgresql.tacodata.net 10.1.45.1
Using domain server:
Name: 10.1.45.1
Address: 10.1.45.1#53
Aliases: 

postgresql.tacodata.net has SRV record 10 100 5432
aup1:postgresql:5432.postgresql.tacodata.net.

当我启动我的依赖应用程序时,我让它们需要postgresql.service,我只是使用postgresql.tacodata.net将ip地址引用到应用程序.

-G

转载注明原文:docker – 如何在机器上启动单元的IP地址并在另一个单元中使用它? - 代码日志