首页 > 解决方案 > 尝试在 mysql 和 Web 服务器之间建立连接,但在 Dockerfile 的帮助下出现错误

问题描述

我正在尝试连接两台服务器,一台是数据库(mysql),第二台是网络服务器(httpd)。在 docker 中,使用 dockerfile 创建的图像并创建了两个容器并在它们中运行代码。两者都在运行,当我尝试输入数据时,Web 服务器前端代码工作正常,出现错误。我在 /var/log/httpd/error_log 中查看 ---> mysql 连接找不到主机“数据”。我想知道如何在网络服务器中定义数据库主机?由于 2 个 Dockerfile 连接问题,两个 IP 地址都在同一子网中。主要问题是什么?

标签: mysqlapachedockerdockerfile

解决方案


容器必须在同一个 docker 网络中,并且主机名是服务名称(默认情况下)。

我建议您使用docker-compose,它旨在运行多个容器并在它们之间建立链接。

先验地,我会在我的 docker-compose.yml 中做类似的事情:

version: '2.4'

services:

  db:
    build:
      context: .
      dockerfile: db.dockerfile
    environment:
      - MYSQL_ROOT_PASSWORD=foo

  web:
    build:
      context: .
      dockerfile: web.dockerfile

然后,键入docker-compose up -d。最后,从 Web 容器中,您将能够访问主机 'db'。

如果您只想使用 dockerfiles,如果我的这篇文章的第一句话得到验证,也是可能的。默认情况下,容器位于网络上bridge,因此您的容器可能位于同一网络中,但您必须将它们链接起来才能进行通信。启动db容器后,您必须web使用以下选项运行容器:

docker run ... --link <db_container_name>:<db_host_name_in_web_container> ...

因此,您将能够dbweb.


推荐阅读