Создание собственного образа Docker работает, использование установленного mysql-connector-python в контейнере не - PullRequest
1 голос
/ 29 апреля 2019

Я хочу развернуть небольшое приложение Python, которое подключается к серверу MySQL (который в данный момент работает локально).В ./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 на моем устройстве dev, соединение с БД работает очень хорошо.Теперь я хотел начать развертывание в 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'

Где моя ошибка?

1 Ответ

1 голос
/ 29 апреля 2019

Мне удалось заставить его работать, изменив мой 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 в любом случае.

Надеюсь, это поможет кому-нибудь - если нет, то, вероятно, поможет будущему мне: -)

...