我用多个容器来运行带有码头的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文件(请注意网络别名与第一个服务名称相同.):
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"
发布于 2022-06-27 21:21:07
使用另一个容器的组合服务名称和容器内进程正在侦听的端口。在您的示例中,假设第二个ports:
数字都是正确的,那么两个容器都应该能够访问zabbix-server:10051
和zabbix-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:
。即使删除这些,也可以使用最初显示的主机名和端口。
https://stackoverflow.com/questions/72777431
复制相似问题