Closed lmontagnon closed 8 months ago
Hi @lmontagnon, not the maintainer. Just a fellow user like you and I have at least managed to get it working.
Not exactly sure what the cause of the issue here is just based on the terminal output you have provided.
However, following the exact steps listed below got it working for me. Maybe you can give it a try and see if it works for you as well:
22.04
LTS25.0.4
cd $HOME
git clone https://github.com/Tiryoh/docker-ros2-desktop-vnc.git --depth 1 --single-branch
tiryoh/ros2-desktop-vnc:humble-amd64
docker image:cd $HOME
cd docker-ros2-desktop-vnc/humble
docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:humble-amd64 .
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble-amd64
Open your preferred browser and go to http://127.0.0.1:6080/
Hope this helps. If it still doesn't, try posting the output of both the docker build
and docker run
in its entirety.
Hi @cardboardcode ,
Thank you for your reply ! The build from source and run the container it's already working for me.
The problem is when I commit the container created once the work is finished inside and I want to relaunch this new image I get this error.
run build docker container of tiryoh/ros2-desktop-vnc:humble-amd64
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble-amd64
make some change inside it, stop it (ctrl+c) and commit the container
docker commit 766f3e47cf4b lmontagnon/testimagevnc:v1
Relaunch step 1. but with my new image lmontagnon/testimagevnc:v1
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m lmontagnon/testimagevnc:v1
Can you try this and tell me if you have same issue ? I will add "How to reproduce" on my first comment.
Hi @cardboardcode ,
Thank you for your reply ! The build from source and run the container it's already working for me.
The problem is when I commit the container created once the work is finished inside and I want to relaunch this new image I get this error.
How to reproduce
1. run build docker container of tiryoh/ros2-desktop-vnc:humble-amd64 `docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble-amd64` 2. make some change inside it, stop it (ctrl+c) and commit the container `docker commit 766f3e47cf4b lmontagnon/testimagevnc:v1` 3. Relaunch **step 1.** but with my new image lmontagnon/testimagevnc:v1 `docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m lmontagnon/testimagevnc:v1`
Can you try this and tell me if you have same issue ? I will add "How to reproduce" on my first comment.
Ah I get it now. Thank you @lmontagnon for clarifying further. Will try and update accordingly since I wish to do the same myself.
Tried it. Encountered the same issue as original thread author.
22.04
LTS25.0.4
cd $HOME
git clone https://github.com/Tiryoh/docker-ros2-desktop-vnc.git --depth 1 --single-branch
tiryoh/ros2-desktop-vnc:humble-amd64
docker image:cd $HOME
cd docker-ros2-desktop-vnc/humble
docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:humble-amd64 .
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble-amd64
Open your preferred browser and go to http://127.0.0.1:6080/
Within VNC, open up terminal and run the following commands:
# Create a new .txt file on ~/Desktop
cd $HOME/Desktop
touch NEW_CHANGES.txt
docker commit <container_id> my_new_vnc_image:1
Determined the <container_id>
by running docker container ls -a
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m my_new_vnc_image:1
Able to run docker container and access VNC as per normal upon running Step 6. Should be able to see the NEW_CHANGES.txt
file still present on Desktop.
Encountered the following error upon running Step 6. Unable to access failing VNC docker container.
* enable custom user: ubuntu
useradd: user 'ubuntu' already exists
set default password to "ubuntu"
source /opt/ros/humble/setup.bash
source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
============================================================================================
NOTE: --security-opt seccomp=unconfined flag is required to launch Ubuntu Jammy based image.
See https://github.com/Tiryoh/docker-ros2-desktop-vnc/pull/56
============================================================================================
2024-03-09 01:47:07,627 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
2024-03-09 01:47:07,627 INFO Set uid to user 0 succeeded
2024-03-09 01:47:07,632 INFO RPC interface 'supervisor' initialized
2024-03-09 01:47:07,632 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2024-03-09 01:47:07,633 INFO supervisord started with pid 37
2024-03-09 01:47:08,638 INFO spawned: 'novnc' with pid 38
2024-03-09 01:47:08,644 INFO spawned: 'vnc' with pid 39
2024-03-09 01:47:08,946 INFO exited: vnc (exit status 1; not expected)
2024-03-09 01:47:09,988 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2024-03-09 01:47:09,993 INFO spawned: 'vnc' with pid 64
2024-03-09 01:47:10,321 INFO exited: vnc (exit status 1; not expected)
2024-03-09 01:47:12,327 INFO spawned: 'vnc' with pid 73
2024-03-09 01:47:12,625 INFO exited: vnc (exit status 1; not expected)
2024-03-09 01:47:15,632 INFO spawned: 'vnc' with pid 82
2024-03-09 01:47:15,916 INFO exited: vnc (exit status 1; not expected)
2024-03-09 01:47:16,917 INFO gave up: vnc entered FATAL state, too many start retries too quickly
Issue can be easily recreated. Will try and debug once I am free. Updating it here once I do.
@lmontagnon Did a bit of debugging. Still can't determine the root cause but narrowed down the issue and figured out a dirty workaround.
The cause of issue seems to be specifically due to:
Running the following command in line 350 of docker-ros2-desktop-vnc/humble/entrypoint.sh
file:
exec /bin/tini -- supervisord -n -c /etc/supervisor/supervisord.conf
The program vnc
fails when its command is ran in the supervisord.conf
file:
[program:vnc]
command=gosu '$USER' bash '$VNCRUN_PATH'
Tried having the command run in verbose to give more info about the unexpected error causing vnc
program to exit with status 1. However, for unknown reasons, it refuses to output in verbose mode so I am currently stuck at this stage of debugging.
While I can't have supervisord
in the docker container run in verbose mode, I found out that the same failing error does not occur when running the committed docker image manually.
You can follow the steps below to manually commit the docker container and run the VNC server based on the new docker image:
Modify line 350 docker-ros2-desktop-vnc/humble/entrypoint.sh
file to the following:
...
# exec /bin/tini -- supervisord -n -c /etc/supervisor/supervisord.conf
/bin/bash
Build the new docker image with the modified entrypoint.sh
:
docker buildx build --platform=linux/amd64 --progress=plain -t tiryoh/ros2-desktop-vnc:humble-amd64 .
Build and run the docker container in interactive bash shell:
docker run -it -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble-amd64
Introduce a small change within the docker container:
# Inside Docker Container
cd /home/ubuntu/Desktop
mkdir NEW_CHANGES.txt
Commit docker container to new docker image:
docker commit <container_id> my_new_image:1
Build and run docker ccontainer based on new saved image in interactive bash shell
docker run -it -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m my_new_image:1
Verify that the same changes is still present in the new container:
# Within Docker Container
ls /home/ubuntu/Desktop
You should see NEW_CHANGES.txt
file is still present.
Run vnc
program within the new docker container:
gosu $USER bash $HOME/.vnc/vnc_run.sh -v
Open a new terminal in your Host Machine and access the docker container:
docker exec -it <container_id> bash
Run novnc
program within the new docker container:
gosu $USER bash -c "websockify --web=/usr/lib/novnc 80 localhost:5901"
Open your preferred browser and go to http://127.0.0.1:6080/
You should be able to access the VNC server now based on the new commited docker image.
Still unable to deduce the root cause and have supervisord
run in verbose mode. @Tiryoh Please advise on this issue. Also thank you for your hard work in this repository.
Hi @cardboardcode @lmontagnon
Thanks for pointing this out! Sorry for my late responding, I have been away for a while for various reasons. I will check it out.
I'm still checking, but maybe this comment is relevant. https://github.com/Tiryoh/docker-ros2-desktop-vnc/issues/100#issuecomment-1646863650
Hi @cardboardcode @lmontagnon
Thanks for pointing this out! Sorry for my late responding, I have been away for a while for various reasons. I will check it out.
I'm still checking, but maybe this comment is relevant. #100 (comment)
Hi @Tiryoh, no worries. Thank you for replying. :blush:
Will try logging out before stopping the container and update if this addresses the issue.
Hi @cardboardcode , @Tiryoh ,
I tried logging out before commit and it seems to work! When I reproduce the same commands (step to reproduce) it works! Can you confirmed that @cardboardcode ?
Thanks for your help,
lmontagnon
@Tiryoh @lmontagnon Can confirm that logging out before stopping the docker container and commiting to new docker image resolves this thread issue on my side as well.
Hi @cardboardcode @lmontagnon
Great! Thank you for your research and thank you for sharing it with us!
Hi @cardboardcode @lmontagnon
What do you think of adding the note like the following?
@Tiryoh Not quite sure what is the purpose of the screenshot/note you attached above. Can you elaborate further?
For now, it is just a screenshot with information that the root README.md
file already provided.
@cardboardcode I made the earlier suggestion with the thought that a message on the console when "docker run" might tell the user that they need to log out before stopping to commit the docker container to a new docker image.
I am thinking of adding "docker commit instructions" to the README as well as the console message above until the issue is resolved.
@cardboardcode I made the earlier suggestion with the thought that a message on the console when "docker run" might tell the user that they need to log out before stopping to commit the docker container to a new docker image.
I am thinking of adding "docker commit instructions" to the README as well as the console message above until the issue is resolved.
@Tiryoh Ah I see. Apologies. I didn't notice it the first time.
I think the NOTE 2
is helpful and important. Do leave it in as well as supplement the README.md
as well. :relaxed: :+1:
@cardboardcode Thanks a lot for getting back to me with your thoughts. Really appreciate it! 🙏
@cardboardcode @Tiryoh
Thank you a lot for your help, @Tiryoh I think adding NOTE 2 it's very important and helpful too !
I have a new issue if you can help me ! https://github.com/Tiryoh/docker-ros2-desktop-vnc/issues/146
Best regards,
lmontagnon
@Tiryoh @lmontagnon Can confirm that logging out before stopping the docker container and commiting to new docker image resolves this thread issue on my side as well.
Solution ✨
Before stopping to commit docker container to new docker image, log out first.
excuse me, could you explain how to logout?
edit: oh I got it. You mean by using the log out button from desktop
You can logout from here
Hi everyone, so before reaching to this thread I was facing same whenever I restart the container. It's seems that whenever we improperly shut down the container, vnc stucks.
I found two solutions for this.
1) Shut Down properly before you stop the container from Docker Desktop. Yes It's annoying as you have to wait for 60 seconds for shutting down.
2) However if you have accidentally closed the container and unable to start it, you can do as follows
Enter below commands in Exec tab of that container
rm -f /tmp/.X1-lock
rm -f /tmp/.X11-unix/X1
or you can connect to terminal of that container by it's ID
docker exec -it CONTAINER ID bash
and Enter above commands.
Hi @SaadRana17,
Thank you for the detailed report! I'll check it out as well.
Hello and thanks for your job !
I have a question : when do you have finish with my container made from your image (tiryoh/ros2-desktop-vnc:humble) how to commit correctly my docker container with vnc ? because i have some issue when i commit and run the new image :
enable custom user: ubuntu useradd: user 'ubuntu' already exists set default password to "ubuntu" source /opt/ros/humble/setup.bash source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
NOTE: --security-opt seccomp=unconfined flag is required to launch Ubuntu Jammy based image. See https://github.com/Tiryoh/docker-ros2-desktop-vnc/pull/56
2024-01-25 14:25:19,861 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing 2024-01-25 14:25:19,861 INFO Set uid to user 0 succeeded 2024-01-25 14:25:19,872 INFO RPC interface 'supervisor' initialized 2024-01-25 14:25:19,872 CRIT Server 'unix_http_server' running without any HTTP authentication checking 2024-01-25 14:25:19,873 INFO supervisord started with pid 37 2024-01-25 14:25:20,877 INFO spawned: 'novnc' with pid 38 2024-01-25 14:25:20,880 INFO spawned: 'vnc' with pid 39 2024-01-25 14:25:21,104 INFO exited: vnc (exit status 1; not expected) 2024-01-25 14:25:22,286 INFO success: novnc entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2024-01-25 14:25:22,288 INFO spawned: 'vnc' with pid 60 2024-01-25 14:25:22,425 INFO exited: vnc (exit status 1; not expected) 2024-01-25 14:25:24,430 INFO spawned: 'vnc' with pid 69 2024-01-25 14:25:24,525 INFO exited: vnc (exit status 1; not expected) 2024-01-25 14:25:27,531 INFO spawned: 'vnc' with pid 78 2024-01-25 14:25:27,626 INFO exited: vnc (exit status 1; not expected) 2024-01-25 14:25:28,628 INFO gave up: vnc entered FATAL state, too many start retries too quickly
How to reproduce
run build docker container of tiryoh/ros2-desktop-vnc:humble-amd64
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble-amd64
make some change inside it, stop it (ctrl+c) and commit the container
docker commit 766f3e47cf4b lmontagnon/testimagevnc:v1
Relaunch step 1. but with my new image lmontagnon/testimagevnc:v1
docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m lmontagnon/testimagevnc:v1
I'm using ubuntu 22.04 LTS and docker version 25.0.3
Thank you for your help,
lmontagnon