I am using the following setup
-
Remote system
- Running "rootless Docker"
- Docker context named "rootless" being active
- VS Code Docker extension being installed
-
VS Code – Connecting via SSH to the remote machine using "Remote Extension"
- Building and runing the Docker container using rootless Docker
- Checking that the "rootless" Docker context is selected
- Trying to use "right-click" option on container "Attach Visual Studio Code", which will fail with the following error message:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
VS Code tries to refer to the "default" Docker context, althouhgh the "rootless" Docker context is selected, which in my case is:
$ echo $DOCKER_HOST
unix:///run/user/1001/docker.sock
Also when the "docker.host" is set to the one of the rootless Docker or if the "docker.context" is set to the "rootless", using "Attach Visual Studio Code" will fail with the same error message.
Update 2023-03-06:
When running docker context use rootless
I get the following output:
And the VSCode Docker extension shows the following:
But when I run then run docker context ls
in the command line I get the following output:
But the value of DOCKER_HOST
is set to the rootless context.
$ echo DOCKER_HOST
unix:///run/user/1001/docker.sock
When running docker ps
it lists the container running in the rootless context.
Is this the reason it does not work as expected?
Workaround – What did work out is the following:
- On local machine defining Docker context for remote
docker context create <some_name> --docker host="ssh://<user>@<ip address>
- VS Code – connected to local machine
- Selecting the Docker context of the remote machine
- Using "Attach Visual Studio Code" to attach to remote container
Does someone know how to fix the issue, so that it is possible to use "Attach Visual Studio Code" directly from the VS Code window being connected via ssh to the remote system?
3
Answers
The problem can be solved by applying the solution from the answer to another question: "answer for .bashrc at ssh login"
I followed the instructions and added the following to
~/.bash_profile
:Be sure that the
export
forDOCKER_HOST
being added to the~/.bashrc
file does not contain$UID
, but$(id -u $USER)
instead, because$UID
will not work insh
.Now
Attach Visual Studio Code
works within the VSCode window being connected via SSH to the remote system as expected.Visual Studio Code Attach
either from the context menu of the Docker extension or usingCMD/CTRL+SHIFT+P
selecting>Dev Containers: Attach to running containers
My SSH config looks like this
I have created SSH key pair called remote, and the pair is under my local
~/.ssh/
. ForSetEnv
you should have that information once you installed docker rootless.In VS Code, I have one line in my user settings.json
where "remote" is the name that matches my SSH config. After these steps you should be able to attach to your running remote container.
I had a similar issue running rootless docker. It seemed it was not honoring environment variables in
~/.bashrc
(likeDOCKER_HOST
)In the logs I found that it was loading
/bin/sh
, rather than/bin/bash
. In this case I am using a managed login user that does not appear in local/etc/passwd
. Moving applicable environment variables into~/.profile
fixed my issues.