#python #docker #anaconda
#питон #docker #анаконда
Вопрос:
Я очень новичок в docker. Я хочу создать свое приложение python в контейнере docker. Когда я создаю приложение, я хочу протестировать / запустить его в Pycharm и в контейнере, который я создаю.
Как мне подключить Pycharm pro к определенному контейнеру или изображению (python или Anaconda)?
Когда я создаю проект, нажимаю чистый python, а затем добавляю remote, затем щелкаю docker и получаю следующий результат
Я работаю на Mac OS X El Capitan (10.11.6) с версией Docker 1.12.1 и Pycharm Pro 2016.2.3
Комментарии:
1. Используете ли вы Docker для Mac или используете компьютер, который вы настроили через docker-machine?
2. @programmerq В настоящее время Docker для Mac
3. Как настроен сервер? В документации здесь упоминается docker machine, который, похоже, вы не используете. Существует также эта открытая проблема для поддержки docker на Mac. Существует также это возможное решение .
4. @kindjacket Могу ли я предложить изменить название этого вопроса? Судя по вашему вопросу, похоже, вы заинтересованы в том, чтобы PyCharm создавал контейнер и развертывал код в этом контейнере. Но в вашем названии, по-моему, говорится, что вы хотите запустить сам PyCharm внутри контейнера docker (что, я полагаю, возможно при пересылке X window).
Ответ №1:
Docker-for-mac поддерживает соединения только через /var/run/docker .сокет sock, который прослушивает ваш хост OSX.
Если вы попытаетесь добавить это в pycharm, вы получите следующее сообщение:
«Не удается подключиться: java.lang.Ошибка ExceptionInInitializerError, вызванная: java.lang.Исключение IllegalStateException: поддерживается только в Linux »
Таким образом, PyCharm действительно хочет подключаться только к демону docker через сокет TCP и поддерживает рекомендуемую защиту TLS этого сокета. Папка Certificates по умолчанию соответствует папке certificate для компьютера docker-machine по умолчанию, «default».
Можно реализовать обходной путь для предоставления доступа к Docker для Mac через TCP-сервер, если на вашем компьютере с OSX установлен socat.
В моей системе он установлен через homebrew:
brew install socat
Теперь, когда он установлен, я могу запустить socat со следующими параметрами:
socat TCP-LISTEN:2376,reuseaddr,fork,bind=127.0.0.1 UNIX-CLIENT:/var/run/docker.sock
ПРЕДУПРЕЖДЕНИЕ: это позволит любому процессу, запущенному от имени любого пользователя на вашем Mac, получить доступ к вашему docker-for-mac. Сокет unix защищен разрешениями пользователя, а 127.0.0.1 — нет.
Эта команда socat сообщает ему прослушивать 127.0.0.1:2376 и передавать соединения в /var/run/docker.sock . Параметры reuseaddr и fork позволяют этой одной команде обслуживать несколько подключений вместо самого первого.
Я могу проверить, работает ли socat, выполнив следующую команду:
docker -H tcp://127.0.0.1:2376 ps
Если вы получите успешный docker ps
ответ, то вы знаете, что процесс socat выполняет свою работу.
Теперь в окне PyCharm я могу установить то же tcp://127.0.0.1:2376
самое на место. Я должен получить сообщение об успешном подключении:
Это обходное решение потребует, чтобы команда socat выполнялась в любое время, когда вы хотите использовать docker из PyCharm.
Если вы хотите сделать то же самое, но с TLS, вы могли бы настроить сертификаты и сделать их доступными как для pycharm, так и для socat, и использовать socat OPENSSL-LISTEN
вместо TCP-LISTEN
функции. Я не буду вдаваться в подробности об этом для этого ответа.