我想部署一个与(当前本地运行的)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/