【问题标题】:How can I retrieve the ip of a service inside the docker-composer?如何在 docker-compose 中检索服务的 ip?
【发布时间】:2018-07-16 11:52:43
【问题描述】:

我正在尝试在 docker 中启动 zabbix,我创建了 docker-compose 和几个服务,一个是数据库。我需要先启动数据库,然后从数据库中获取IP地址以设置其他服务,但不知道该怎么做,已经尝试使用链接,但没有成功。

这是我的 docker-compose.yml

version: "2"
services:
mysql-zabbix :
  image: "mysql:5.7"
  ports:
    - "53306:3306"
  networks:
    - net_zabbix
  volumes:
    - "vol_db_zabbix:/var/lib/mysql"
  environment:
    - "MYSQL_ROOT_PASSWORD=abcd"
    - "MYSQL_DATABASE=zabbix"
    - "MYSQL_USER=zabbix"
    - "MYSQL_PASSWORD=123456"

zabbix-server:
  image: "zabbix/zabbix-server-mysql:alpine-3.4.11"
  ports:
    - "10051:10051"
  networks:
    - net_zabbix
  environment:
    - "DB_SERVER_PORT=53306"
    - DB_SERVER_HOST=zabbix.db
    - "MYSQL_USER=zabbix"
    - "MYSQL_PASSWORD=123456"
  depends_on:
    - mysql-zabbix
  external_links:
    - mysql-zabbix:zabbix.db

zabbix-web:
  image: "zabbix/zabbix-web-apache-mysql:alpine-3.4.11"
  ports:
    - "80:80"
  networks:
    - net_zabbix
  environment:
    - DB_SERVER_HOST=zabbix.db
    - "DB_SERVER_PORT=53306"
    - "MYSQL_USER=zabbix"
    - "MYSQL_PASSWORD=123456"
    - ZBX_SERVER_HOST=zabbix.server
    - "PHP_TZ=America/Sao_Paulo"
  depends_on:
    - zabbix-server
  external_links:
    - mysql-zabbix:zabbix.db
    - zabbix-server:zabbix.server

zabbix-agent:
  image: "zabbix/zabbix-agent:alpine-3.4.11"
  ports:
    - "10050:10050"
  networks:
    - net_zabbix
  environment:
    - "ZBX_HOSTNAME=demo_zabbix"
    - ZBX_SERVER_HOST=zabbix.server
  external_links:
    - zabbix-server:zabbix.server

zabbix-proxy:
  image: "zabbix/zabbix-proxy-sqlite3:alpine-3.4.11"
  ports:
    - "10053:10050"
  networks:
    - net_zabbix
  environment:
    - "ZBX_HOSTNAME=demo_zabbix"
    - ZBX_SERVER_HOST=zabbix.server
  external_links:
    - zabbix-server:zabbix.server

networks:
net_zabbix:

volumes:
vol_db_zabbix:

【问题讨论】:

  • 我不知道 zabix,你的 docker-compose 似乎有很多不必要的配置,但在我看来,你应该设置你的DB_SERVER_HOST=mysql-zabbix,因为它在 docker 中为 db 提供了地址。

标签: docker docker-compose yaml zabbix


【解决方案1】:

Docker Compose 将为您隐式创建一个私有网络,一旦创建了该私有网络,Docker 就会提供一个 DNS 服务,将容器名称解析为 IP 地址。 (显式的networks: 声明无害并且具有相同的效果。)您可以通过容器名称和其他别名来引用容器。 Docker Compose will register aliases to reach each container under its key in the docker-compose.yml file.

所有这一切意味着您可以使用其他容器名称作为各种*_HOST 环境变量的值。请注意,使用的端口是容器内部端口;如果您要连接的服务端口也发布到主机,则它是冒号右侧一侧的端口。

在您的示例中,您应该指定(针对不同的容器视情况而定):

environment:
  - DB_SERVER_HOST=mysql-zabbix
  - DB_SERVER_PORT=3306
  - ZBX_SERVER_HOST=zabbix-server

您不需要指定任何类型的链接。 depends_on 是严格可选的,但如果你运行docker-compose up zabbix-web,它也会启动它所依赖的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2020-03-16
    • 2021-08-15
    • 2023-03-23
    • 2021-10-26
    相关资源
    最近更新 更多