首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >码头-组成网络:如何连接到其他容器?

码头-组成网络:如何连接到其他容器?
EN

Stack Overflow用户
提问于 2022-06-27 19:30:22
回答 1查看 49关注 0票数 0

我用多个容器来运行带有码头的zabbix。

我在连接两个容器时遇到了问题(请参阅:docker容器化zabbix服务器监视运行zabbix服务器的同一主机:连接被拒绝 )。

因此,我想知道容器之间的连接是如何在坞-组合中工作的:我需要在docker-compose.yml中使用links吗?我是否需要在docker-compose.yml中在network中指定一个ip入口,然后在我的应用程序中使用这个ip adress?

特别是,如果我想连接到端口中名为containerA的容器A ip -Compose.yml中的容器B名为containerB的容器B-come.yml中的容器名称,我是否可以使用容器名称作为它出现在码头ps -a中?(容器名称通常与docker-come.yml中的容器名称不相同),还是应该像在docker-compose.yml中那样使用服务名称?或者我应该使用链接服务:别名,以便我可以在我的应用程序中使用别名?

我尝试使用链接,但我有一个循环链接问题,因为我是链接到容器到对方。

这是yml文件(请注意网络别名与第一个服务名称相同.):

代码语言:javascript
运行
复制
version: '3.5'
services:
 zabbix-server:
  container_name: zabbixserver
  image: zabbix/zabbix-server-pgsql:centos-6.0-latest
  ports:
   - "10051:10051"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
   - ./zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:rw
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
   - snmptraps:/var/lib/zabbix/snmptraps:rw
#   - ./env_vars/.ZBX_DB_CA_FILE:/run/secrets/root-ca.pem:ro
#   - ./env_vars/.ZBX_DB_CERT_FILE:/run/secrets/client-cert.pem:ro
#   - ./env_vars/.ZBX_DB_KEY_FILE:/run/secrets/client-key.pem:ro
  ulimits:
   nproc: 65535
   nofile:
    soft: 20000
    hard: 40000
  deploy:
   resources:
    limits:
     cpus: '0.70'
     memory: 1G
    reservations:
     cpus: '0.5'
     memory: 512M
  env_file:
   - ./env_vars/.env_db_pgsql
   - ./env_vars/.env_srv
  secrets:
   - POSTGRES_USER
   - POSTGRES_PASSWORD
  depends_on:
   - postgres-server
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-server
     - zabbix-server-pgsql
     - zabbix-server-centos-pgsql
     - zabbix-server-pgsql-centos
   zbx_net_frontend:
#  devices:
#   - "/dev/ttyUSB0:/dev/ttyUSB0"
  stop_grace_period: 30s
  sysctls:
   - net.ipv4.ip_local_port_range=1024 65000
   - net.ipv4.conf.all.accept_redirects=0
   - net.ipv4.conf.all.secure_redirects=0
   - net.ipv4.conf.all.send_redirects=0
  labels:
   com.zabbix.description: "Zabbix server with PostgreSQL database support"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-server"
   com.zabbix.dbtype: "pgsql"
   com.zabbix.os: "centos"
zabbix-agent:
  image: zabbix/zabbix-agent:centos-6.0-latest
  ports:
   - "10050:10050"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
  deploy:
   resources:
    limits:
     cpus: '0.2'
     memory: 128M
    reservations:
     cpus: '0.1'
     memory: 64M
   mode: global
  links:
   - zabbix-server:zabbix-server
  env_file:
   - ./env_vars/.env_agent
  privileged: true
  pid: "host"
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-agent
     - zabbix-agent-passive
     - zabbix-agent-centos
  stop_grace_period: 5s
  labels:
   com.zabbix.description: "Zabbix agent"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-agentd"
   com.zabbix.os: "centos"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-27 21:21:07

使用另一个容器的组合服务名称和容器内进程正在侦听的端口。在您的示例中,假设第二个ports:数字都是正确的,那么两个容器都应该能够访问zabbix-server:10051zabbix-agent:10050。还请参阅Docker文档中的网络写作

我需要在links中使用docker-compose.yml吗?

links:选项已经过时,如果存在,您应该删除它。同样,expose:也只用于过时的第一代Docker网络,从您的撰写文件中删除它没有任何后果。

是否需要在networks中在docker-compose.yml中指定IP地址?

不,Docker可以自己分配容器-私有IP地址。这些是Docker的内部实现细节。知道它们的存在是有用的(特别是,因为每个容器都有一个私有IP地址,多个容器可以在内部使用相同的端口),但是您不需要直接指定它们或查找它们。

您很少需要指定networks: { aliases: }或重写容器生成的container_name:docker ps名称与撰写文件中的内容不匹配,但这不是一个实际问题。如果您需要直接管理单个容器,您可以例如docker-compose stop zabbix-server,而且正如前面所描述的,您可以使用Compose服务名称进行容器到容器的通信。

实际上,对于大多数实际情况,您可以完全删除所有networks:块。Compose为您提供了一个名为default的网络,您通常不需要配置任何内容。

因此,在您最初显示的文件中,我建议删除所有networks:links:container_name:选项。只有当您想从Docker外部调用这些容器时,才需要ports:。即使删除这些,也可以使用最初显示的主机名和端口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72777431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档