python - 创建自定义 Docker 镜像可以工作,但在容器中使用已安装的 mysql-connector-python 则不行

标签 python docker dockerfile mysql-python

我想部署一个与(当前本地运行的)MySQL 服务器连接的小型 Python 应用程序。在 ./fzwk-app/ 中,我使用 DBController.py 创建了一个模块 database:

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 镜像效果很好(docker build -t fzwk-app:0.1 .),但是当我尝试创建并运行容器时(docker run fzwk-app),我收到以下 Python 回溯:

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'

我的错误在哪里?

最佳答案

我设法通过将 Dockerfile 更改为

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

所以,看来 pip install mysql-connector-python我猜做了更改(尽管我也移动了应用程序在图像上的位置,但这更多是为了在执行 docker exec -it fzwk-app /bin/bash 时获得更好的概览...

至少现在我得到了预期的

_mysql_connector.MySQLInterfaceError: Can't connect to MySQL server on 'localhost' (99)

错误导致它无法与我的数据库连接,但为此我计划使用 docker-compose 构建一个堆栈无论如何。

希望这对任何人都有帮助——如果没有,它可能会对 future 的我有所帮助:-)

关于python - 创建自定义 Docker 镜像可以工作,但在容器中使用已安装的 mysql-connector-python 则不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55904444/

相关文章:

python - 如何从输入列表/数组创建单列 SQL 表?

python - (已解决)Tensorflow 联合 | tff.learning.from_keras_model() 带有 DenseFeature 层和多个输入的模型

python - 使用 sklearn 虚拟分类器的随机分类器

nginx - 使用 nginx 作为代理到 java web servlet

python - 使用 pip 下载中的 pkgs 安装 pip 失败

docker - 为什么我的 docker-entrypoint.sh 不执行?

json - 有没有更好的方法来格式化 docker 输出?

docker - 更改 docker 和 Dockerfile 的时区

docker - 构建容器镜像时,列出构建上下文和/或 WORKDIR 中的所有文件

c# - 带有 .Net Core API 的 Docker