Docker compose mysql connection failing(Docker 撰写 mysql 连接失败)
问题描述
我正在尝试使用 docker-compose 运行 2 个 docker 容器并将 mysql 容器连接到应用程序容器.Mysql 容器正在运行但应用程序容器无法启动并出现错误 错误:2003:无法连接到 MySQL127.0.0.1:3306"上的服务器(111 连接被拒绝)似乎我的应用程序容器正在尝试连接我的主机 mysql 而不是 mysql 容器.
I am trying to run 2 docker containers using docker-compose and connect mysql container to app container.Mysql container is running but app container is failing to start with the error Error:2003: Can't connect to MySQL server on '127.0.0.1:3306' (111 Connection refused) It seems like my app container is trying to connect my host mysql instead of mysql container.
docker-compose.yml
version: '2'
services:
mysql:
image: mysql:5.7
container_name: database
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: malicious
MYSQL_USER: root
MYSQL_PASSWORD: root
app:
build: .
restart: unless-stopped
volumes:
- .:/Docker_compose_app #app directory
depends_on:
- "mysql"
command: [ "python", "database_update.py"]
restart: unless-restart
environment:
# Environment variables to configure the app on startup.
MYSQL_DATABASE: malicious
MYSQL_HOST: database
Dockerfile
FROM python:2.7
ADD . /Docker_compose_app
WORKDIR /Docker_compose_app
RUN apt-get update
RUN pip install --requirement requirement.txt
这是我的 database_update.py 文件.
def create_TB(cursor,connection):
query = '''CREATE TABLE {}(malicious VARCHAR(100) NOT NULL)'''.format("url_lookup")
cursor.execute(query)
connection.commit()
def connection():
try:
cnx = mysql.connector.connect(user="root",password = 'root',database=malicious)
cursor = cnx.cursor()
create_TB(cursor,cnx)
except mysql.connector.errors.Error as err:
data = {"There is an issue in connection to DB":"Error: {}".format(err)}
推荐答案
我可以看到两个问题:
尝试添加
Try to add
links:
- mysql:mysql
到 Docker Compose 文件中的 app
服务.这将确保您可以从 app
访问 mysql
容器.它将在您的 app
容器中设置一个主机名映射 (DNS),因此当您从 app
中 ping mysql
时,它会将其解析为mysql
容器的 IP 地址.
to the app
service in your Docker Compose file. This will make sure that you can reach the mysql
container from app
. It will set up a hostname mapping (DNS) in your app
container, so when you ping mysql
from app
, it will resolve it to the mysql
container's IP address.
在您的 .py
文件中,您在哪里定义要连接的主机?将 host="mysql"
添加到 connect
调用.默认情况下,它将连接到 127.0.0.1
,这就是您所看到的.
In your .py
file, where are you defining which host to connect to? Add host="mysql"
to the connect
call. By default, it will connect to 127.0.0.1
, which is what you're seeing.
cnx = mysql.connector.connect(host="mysql", user="root", password = 'root', database=malicious)
解决这两个问题应该可以解决您的问题.
Fixing both of these should solve your problem.
这篇关于Docker 撰写 mysql 连接失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Docker 撰写 mysql 连接失败


- SQL 临时表问题 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01