Pycharm use Docker Container Python as Remote Interpreter
Thank you for depicting the dilemma so poignantly and clearly in your cartoon :-). My colleague and I were trying to do something similar and what ultimately worked beautifully was creating an SSH config directly to the Docker container jumping from the remote machine, and then setting it as a remote SSH interpreter so that pycharm doesn't even realize it's a Docker container. It also works well for vscode.
- set up ssh service in docker container (subset of steps in https://dev.to/s1ntaxe770r/how-to-setup-ssh-within-a-docker-container-i5i, port22 stuff wasn't needed)
docker exec -it <container> bash
: create admin interactive prompt for dockerapt-get install openssh-server
service ssh start
- confirm with
service ssh status
->* sshd is running
- determine IP and test SSHing from remote machine into container (adapted from https://phoenixnap.com/kb/how-to-ssh-into-docker-container, steps 2 and 3)
- from normal command prompt on remote machine (not within container):
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <container>
to get container IP - test:
ping -c 3 <container_ip>
- ssh:
ssh <container_ip>
; should drop you into the container as your user; however, requires container to be configured properly (docker run
cmd has-v /etc/passwd:/etc/passwd:ro \
etc.). It may ask for a password. note: if you do this for a different container later that is assigned the same IP, you will get a warning and may need to delete the previous key fromknown_hosts
; just follow the instructions in the warning.
- from normal command prompt on remote machine (not within container):
- test SSH from local machine
- if you don't have it set up already, set up passwordless ssh key-based authentication to the remote machine with the docker container
- make SSH command that uses your remote machine as a jump server to the container:
ssh -J <remote_machine> <container_ip>
, as described in https://wiki.gentoo.org/wiki/SSH_jump_host; if successful you should drop into the container just as you did from the remote machine - save this setup in your
~/.ssh/config
; follow theProxyJump Example
from https://wiki.gentoo.org/wiki/SSH_jump_host - test config with
ssh <container_host_name_defined_in_ssh_config>
; should also drop you into interactive container
- configure pycharm (or vscode or any IDE that accepts remote SSH interpreter)
Preferences -> Project -> Python Interpreter -> Add -> SSH Interpreter -> New server configuration
- host:
<container_host_name_defined_in_ssh_config>
- port:
22
- username:
<username_on_remote_server>
- select interpreter, can navigate using the folder icon, which will walk you through paths within the docker, or you can enter the result of
which python
from the container - follow pycharm prompts