Last active
December 28, 2022 14:42
-
-
Save dainis-boumber/fd580659db368d372afe4c1dd2af0521 to your computer and use it in GitHub Desktop.
Setup PyCharm IDE to remote debug code inside a Docker container using ssh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## IMPORTANT: | |
# Should work for any IDE that supports ssh but only tested on PyCharm | |
# These instructions are for systemd OS (Ubuntu 16.04 and up, Debian). | |
# For systems running upstart like 14.04, modify /etc/default/docker by adding DOCKER_OPTS | |
# | |
# | |
# | |
## First, we need to get Docker to accept ssh connections: | |
# | |
## Open /lib/systemd/system/docker.service | |
## Add EnviromentFile + add "$DOCKER_OPTS" at end of ExecStart | |
## DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock" | |
## After change execute "$ systemctl daemon-reload" | |
## may need to reboot | |
# | |
## Notes: ## port 2376 is traditionally used for encrypted comm, 2375 unsecured | |
## Example: | |
EnvironmentFile=/etc/default/docker | |
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock | |
## create and run (replace paths, tags and username with whatever): | |
docker build -t dainis/ssh-debug -f Docker-ssh-rdebug . | |
docker run -ti -d -v /home/dainis/workspace/test/outputs:/outputs \ | |
-v /home/dainis/workspace/test/inputs:/inputs \ | |
-p 22222:22 --name ssh-debug dainis/ssh-debug | |
# login to look around (enter password as prompted) | |
ssh root@localhost -p 22222 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Remote debug enabled container. IDE and code on host/network, environment | |
# isolated in Docker. Tested with PyCharm 17.2 Professional Edition. | |
FROM tensorflow/tensorflow:latest-devel-gpu-py3 | |
# ssh will mess up your paths so save to profile | |
# if you try to export them from outside gotta use a script | |
RUN echo "export PATH=$PATH" >> /etc/profile && \ | |
echo "ldconfig" >> /etc/profile | |
# SSH support | |
RUN apt-get update && apt-get install -y openssh-server && apt-get install sudo | |
RUN mkdir /var/run/sshd | |
# set root password to root - change this to whatver | |
RUN echo 'root:root' | chpasswd | |
# configure sshd to let root login | |
RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config | |
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config | |
# expose SSH port | |
EXPOSE 22 | |
RUN service ssh restart | |
# this is where we will mount a directory to get inputs/outputs without having to ssh every time | |
RUN mkdir /root/inputs | |
RUN mkdir /root/outputs | |
# this is where our projects go | |
RUN mkdir /root/workspace | |
# set default directory we enter on logon to home directory | |
WORKDIR /root | |
CMD ["/usr/sbin/sshd", "-D"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In PyCharm, select project settings > interpreter > set to remote and set authentication to ssh | |
Enter the login details | |
To execute your code on remote machine you'll have to perform few steps | |
Define a remote interpreter for your project | |
Go to File -> Settings -> Project: {project_name} -> Project Interpreter. | |
Click on cog icon and select Add Remote. | |
Add your SSH host credentials and interpreter path (on remote machine). | |
As a result, you should see new position in project interpreter dropdown selector, spelled like Python Version (ssh://login@host:port/path/to/interpreter). Package list should be populated with records. | |
Define deployment settings | |
Go to File -> Settings -> Build, Execution, Deployment -> Deployment | |
Create new deployment settings and fill ssh host configuration | |
Type: SFTP | |
SFTP host: same as interpreter host | |
Root path: path where files will be uploaded | |
Click on button "Test SFTP connection" to check if provided data are correct. | |
Go to mappings and configure mapping between local path and deployment path. | |
Deployment path is relative to root path - / is equivalent to /my/root/path, /dir to /my/root/path/dir etc. | |
Deploy your code | |
Select Tools -> Deployment -> Upload to {deployment settings name} | |
Upload process will be started in background. Wait for upload to complete. | |
Go and edit your project Run configurations. You can also click on file you want to run and select "Run". | |
Code should run in the container.You can set up break points etc, then configure debug to use remote interpreter | |
in a similar manner as you just configured run. | |
Now you can setup any environment in 2 minutes and debug in it like on your own machine. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment