Pycharm use Docker Container Python as Remote Interpreter Pycharm use Docker Container Python as Remote Interpreter docker docker

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.

  1. 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 docker
    • apt-get install openssh-server
    • service ssh start
    • confirm with service ssh status -> * sshd is running
  2. 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 from known_hosts; just follow the instructions in the warning.
  3. 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 the ProxyJump 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
  4. 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