Как мне запустить pycharm в моем контейнере docker?

#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, вы получите следующее сообщение:

Поддерживается только в Linux

«Не удается подключиться: 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 функции. Я не буду вдаваться в подробности об этом для этого ответа.