首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头集装箱与其他容器在不同主机/服务器上的通信

码头集装箱与其他容器在不同主机/服务器上的通信
EN

Stack Overflow用户
提问于 2020-08-07 17:03:12
回答 1查看 615关注 0票数 0

我有两个服务器(CentOS8)。

zabbixfrontend).上,我有mysql-server容器,在server2上,我有zabbix-前端,即zabbix-web-apache-mysql (容器名为server1 )。我正在尝试从zabbix前端容器连接到mysql服务器。获取误差

代码语言:javascript
复制
bash-4.4$ mysql -h <MYSQL_SERVER_IP> -P 3306 -uroot -p 
Enter password: 
ERROR 2002 (HY000): Can't connect to MySQL server on '<MYSQL_SERVER_IP>' (115)

当我从zabbix前端容器到mysql服务器IP执行nc时,我会得到“无主机路由”。错误信息。

代码语言:javascript
复制
bash-4.4$ nc -zv <MYSQL_SERVER_IP> 3306
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: No route to host.

注意:我正在成功地从主机(server2) mysql-服务器容器中执行nc操作。

docker-compose.yml

代码语言:javascript
复制
version: '3.5'
services:
 zabbix-web-apache-mysql:
  image: zabbix/zabbix-web-apache-mysql:centos-8.0-latest
  container_name: zabbixfrontend
  #network_mode: host
  ports:
   - "80:8080"
   - "443:8443"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/ssl/apache2:/etc/ssl/apache2:ro
   - ./usr/share/zabbix/:/usr/share/zabbix/
  env_file:
   - .env_db_mysql
   - .env_web
  secrets:
   - MYSQL_USER
   - MYSQL_PASSWORD
   - MYSQL_ROOT_PASSWORD
     # zbx_net_frontend:
  sysctls:
   - net.core.somaxconn=65535

secrets:
  MYSQL_USER:
    file: ./.MYSQL_USER
  MYSQL_PASSWORD:
    file: ./.MYSQL_PASSWORD
  MYSQL_ROOT_PASSWORD:
    file: ./.MYSQL_ROOT_PASSWORD

docker logs zabbixfrontend如下所示

代码语言:javascript
复制
** Deploying Zabbix web-interface (Apache) with MySQL database
** Using MYSQL_USER variable from ENV
** Using MYSQL_PASSWORD variable from ENV
********************
* DB_SERVER_HOST: <MYSQL_SERVER_IP>
* DB_SERVER_PORT: 3306
* DB_SERVER_DBNAME: zabbix
********************
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
**** MySQL server is not available. Waiting 5 seconds...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 14:39:57

nc消息说的是实话:没有到主机的路线。

这是因为当您在码头bridge网络中部署前端容器时,它的IP地址属于172.18.0.0/16子网,而您的a试图通过属于不同子网的IP地址(10.0.0.0/16)到达数据库。

另一方面,当您在host网络上部署前端容器时,您不再面临这个问题,因为现在IP实际上正在使用主机的IP地址10.0.0.2,并且不需要显式创建路由以达到10.0.0.3。

现在,您面临的问题是您不能再通过浏览器访问web。之所以会出现这种情况,是因为我假设您将ports:"选项保留在docker-compose.yml中,并尝试在localhost:80/443上访问服务。如果在主机网络上运行容器,则不需要指定源端口和目标端口。容器将直接侦听容器内打开的端口上的主机。

尝试使用此配置运行前端容器,然后在localhost:8080localhost:8443上访问它。

代码语言:javascript
复制
...  
network_mode: host
#  ports:
#   - "80:8080"
#   - "443:8443"
  volumes:
...

在主机网络上运行容器不是我通常推荐的事情,因此您的设置非常特殊,一个容器在一个码头主机上运行,另一个容器在另一个独立的码头主机上运行,我想您不希望创建一个覆盖网络,并最终将两个码头主机注册为一个群集。

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

https://stackoverflow.com/questions/63306290

复制
相关文章

相似问题

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