mysql - 尝试在 mysql 和 Web 服务器之间建立连接,但在 Dockerfile 的帮助下出现错误
问题描述
我正在尝试连接两台服务器,一台是数据库(mysql),第二台是网络服务器(httpd)。在 docker 中,使用 dockerfile 创建的图像并创建了两个容器并在它们中运行代码。两者都在运行,当我尝试输入数据时,Web 服务器前端代码工作正常,出现错误。我在 /var/log/httpd/error_log 中查看 ---> mysql 连接找不到主机“数据”。我想知道如何在网络服务器中定义数据库主机?由于 2 个 Dockerfile 连接问题,两个 IP 地址都在同一子网中。主要问题是什么?
解决方案
容器必须在同一个 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> ...
因此,您将能够db
从web
.
推荐阅读
- python - 如何提取所有医生姓名
- r - 查找出现次数最多的组合词
- sql - 处理带有重复项的 MERGE
- java - 有没有一种方法可以在用户按下按钮或输入后显示我的打印语句?
- python-3.x - 在 tkinter 中显示 shapefile?
- java - Avast Antivirus / MailShield 更新后 Java 套接字连接被拒绝
- snmp - 如何为多个代理运行 snmp 模拟器?
- kubernetes - Kubernetes 资源配置中的 request 和 args 有什么区别?
- postgresql - Dataproc 尝试通过 JDBC 连接到 Postgres,缺少权限
- node.js - typescript dependency injection with little footprint