I have my own hand written Dockerfile/docker-compose files. I start containers from command line. Now I want to attach VS2017 (not VSCode) to my app inside a Docker (Linux-based
How about this:
If your service is based off of the microsoft/dotnet image, create a new dockerfile based on the same image, and install the debugger, ssh and unzip.
FROM microsoft/dotnet
RUN apt-get update && apt-get -y install openssh-server unzip
RUN mkdir /var/run/sshd && chmod 0755 /var/run/sshd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin without-password/g' /etc/ssh/sshd_config
RUN sed -i 's/#StrictModes yes/StrictModes no/g' /etc/ssh/sshd_config
RUN service ssh restart
RUN mkdir /root/.vs-debugger && chmod 0755 /root/.vs-debugger
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v vs2017u1 -l /root/.vs-debugger/
EXPOSE 22
Build and push this to your registry.
docker build -t myregistry/dotnetdebugger .
docker push myregistry/dotnetdebugger
Next ensure that your service's build is outputting the PDB files as portable PDBs https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio
And ensure that the PDB files are included with the dlls when you build your service's docker image.
Then when your container is running and you decide that you need to debug it, you can attach the debugger container as a side car container to the service:
docker run -d -p 10222:22 --pid container: - myregistry/dotnetdebugger
Then in visual studio, go to Tools > Options > Crossplatform > Connection Manager - and add a new connection. specify the IP or hostname of the container, 10222 as the port (the one in the docker run command), and root as the user with no password.
Hope that helps