You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Docker镜像构建成功,容器内无法使用mysql-connector-python

问题:Docker部署Python应用时遭遇ModuleNotFoundError: No module named 'mysql'

我正在部署一个连接本地MySQL服务器的小型Python应用,项目结构如下:

  • 代码位于./fzwk-app/目录,其中包含database模块及DBController.py文件,核心代码如下:
class DbController(object):
    def __init__(self):
        self._db_connection = mysql.connector.connect(
            host='localhost',
            user='foo',
            passwd='bar',
            database='mydb'
        )
        self._db_cur = self._db_connection.cursor()
# ...

本地运行./fzwk-app/__init__.py时数据库连接完全正常,但部署到Docker容器时遇到了问题。我编写的Dockerfile内容如下:

FROM python:3.6
ADD ./fzwk-app/ /
RUN pip3 install mysql-connector
CMD [ "python", "./__init__.py" ]

使用docker build -t fzwk-app:0.1 .构建镜像成功,但执行docker run fzwk-app运行容器时,出现了如下回溯错误:

Traceback (most recent call last):
  File "./__init__.py", line 21, in <module>
    from database import DbController as db
  File "/database/DbController.py", line 18, in <module>
    import mysql.connector
ModuleNotFoundError: No module named 'mysql'

请问我的问题出在哪里?


解决方案

1. 核心问题:安装了错误的Python包

你遇到的ModuleNotFoundError是因为你安装的mysql-connector包并不是提供mysql.connector模块的正确包。实际上,mysql.connector这个模块来自于mysql-connector-python包,而mysql-connector是一个早已废弃的同名包,根本不包含你需要的模块。

修改Dockerfile中的安装命令,替换为正确的包名:

RUN pip3 install mysql-connector-python

2. 额外优化建议

  • 用requirements.txt管理依赖:为了避免类似的依赖乌龙,建议在项目根目录创建requirements.txt文件,写入需要的依赖包:

    mysql-connector-python
    

    然后在Dockerfile中改用以下命令安装,这样更便于维护依赖版本,也能避免手动输入错误:

    RUN pip3 install -r requirements.txt
    
  • 提前解决数据库连接的后续问题:搞定模块问题后,你很快会遇到新的坑——容器内的localhost指向容器自身,而不是宿主机的MySQL服务器。解决方法如下:

    • Linux/macOS环境:把host改为host.docker.internal,这是Docker内置的指向宿主机的域名;
    • Windows环境或上述域名失效时:直接使用宿主机的实际IP地址;
    • 同时要确保宿主机的MySQL服务器允许外部连接:修改MySQL配置的bind-address为0.0.0.0,并给foo用户授权外部访问权限(比如GRANT ALL ON mydb.* TO 'foo'@'%' IDENTIFIED BY 'bar';)。

3. 优化后的完整Dockerfile示例

FROM python:3.6
ADD ./fzwk-app/ /app
WORKDIR /app
RUN pip3 install mysql-connector-python
CMD [ "python", "__init__.py" ]

这里额外添加了WORKDIR /app,把容器的工作目录切换到应用目录,执行命令时路径更清晰,也能避免潜在的路径问题。

内容的提问来源于stack exchange,提问作者appfrosch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:30:54