{"id":1274,"date":"2024-08-17T23:44:12","date_gmt":"2024-08-17T23:44:12","guid":{"rendered":"https:\/\/sparkonelabs.com\/home\/?p=1274"},"modified":"2024-09-02T05:29:52","modified_gmt":"2024-09-02T05:29:52","slug":"gazebo-robot-simulator-in-a-docker-container","status":"publish","type":"post","link":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/","title":{"rendered":"Gazebo Robot Simulator in a Docker Container"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Well this is one of my first attempts at working with a docker container in order to isolate various AUR packages and perform patches or version control on dependencies, without interfering with package dependencies on my primary system. Up until this point, I have worked with various virutal python environments when experimenting with AI tools obtained from Github. Docker containers offer virtual environment advantages for software which is not necessarily utilizing python based applications. Therefore, it is a nice technology to familiarize myself with for future experiments.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\necho &quot;Script for creating a docker container with X server forwarding enabled&quot;\ndocker run -it \\\n  --gpus all \\\n  -e DISPLAY=$DISPLAY \\\n  -v \/tmp\/.X11-unix:\/tmp\/.X11-unix \\\n  --network host \\\n  --user root \\\n  --hostname sparkdockergazebo \\\n  --name arch_for_gazebo \\\n  archlinux:latest \\\n  \/bin\/bash\n\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Script for creating a docker container with X server forwarding enabled<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">run<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">it<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">gpus<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">all<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">e<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">DISPLAY<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9\">$DISPLAY<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">v<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">tmp<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">X11<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">unix<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #EBCB8B\">tmp<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">X11<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">unix<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">network<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">host<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">user<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">root<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">hostname<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">sparkdockergazebo<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">arch_for_gazebo<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  archlinux<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9\">latest<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">bin<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">bash<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The above is a bash shell script for creating a docker container (persistent) which should allow X server forwarding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Update:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gazebo turned out to be not exactly what I was looking for in terms of learning how to use FANUC robotics for industrial work cell operation. Instead, I settled on RoboDK, as it was somewhat easier to use and had the FANUC automotive arm robots already available in the robotics asset library. Additionally, the interface seemed nicer and they offered a 30-day free trial. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The software was set up in an ubuntu image inside a docker container, which was interesting to set up. Here are some of the bash shell scripts which were created to facilitate this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\necho &quot;Script for creating a docker container with X server forwarding enabled, admin user setup, hostname fix, volume mount, and root password change&quot;\necho &quot;This script uses a Dockerfile instead of passing an initial long string argument to the starting bash command, which should allow it to be more reusable&quot;\n\n# Check if the image already exists\nif [[ &quot;$(docker images -q ubuntu_for_robodk 2&gt; \/dev\/null)&quot; == &quot;&quot; ]]; then\n  echo &quot;Image does not exist. Building now...&quot;\n  # Build the Docker image\n  docker build -t ubuntu_for_robodk .\nelse\n  echo &quot;Image already exists. Skipping build step.&quot;\nfi\n\n# Check if the container already exists\nif [[ &quot;$(docker ps -aq -f name=ubuntu_for_robodk)&quot; ]]; then\n  echo &quot;Container already exists. Starting and attaching to it...&quot;\n  docker start -i ubuntu_for_robodk\nelse\n  echo &quot;Creating and starting new container...&quot;\n  # Create and start the container\n  docker run -it \\\n    --gpus all \\\n    -e DISPLAY=$DISPLAY \\\n    -v \/tmp\/.X11-unix:\/tmp\/.X11-unix \\\n    -v \/home\/sparkone\/Downloads:\/mnt\/host \\\n    --network host \\\n    --hostname sparkdockerrobodk \\\n    --name ubuntu_for_robodk \\\n    ubuntu_for_robodk\nfi\n[sparkone@sparktwo Docker]$ cat start_container_ubuntu_x11forward_0.sh \n#!\/bin\/bash\n\n# Name of your Docker container\nCONTAINER_NAME=&quot;ubuntu_for_robodk&quot;\n\n# Check if the container exists\nif ! docker ps -a --format '{{.Names}}' | grep -q &quot;^${CONTAINER_NAME}$&quot;; then\n    echo &quot;Container ${CONTAINER_NAME} does not exist. Please create it first.&quot;\n    exit 1\nfi\n\n# Check if the container is running\nif ! docker ps --format '{{.Names}}' | grep -q &quot;^${CONTAINER_NAME}$&quot;; then\n    echo &quot;Container ${CONTAINER_NAME} is not running. Starting it now...&quot;\n    docker start ${CONTAINER_NAME}\nfi\n\n# Attach to the container\necho &quot;Attaching to container ${CONTAINER_NAME}...&quot;\ndocker exec -it ${CONTAINER_NAME} \/bin\/bash\n\necho &quot;Exited from container ${CONTAINER_NAME}&quot;\n\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Script for creating a docker container with X server forwarding enabled, admin user setup, hostname fix, volume mount, and root password change<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">This script uses a Dockerfile instead of passing an initial long string argument to the starting bash command, which should allow it to be more reusable<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Check<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">image<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">already<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> [[ <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$(docker images -q ubuntu_for_robodk 2&gt; \/dev\/null)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\"> ]]<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Image does not exist. Building now...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  # <\/span><span style=\"color: #D8DEE9\">Build<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">build<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Image already exists. Skipping build step.<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Check<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">already<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> [[ <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$(docker ps -aq -f name=ubuntu_for_robodk)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> ]]<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Container already exists. Starting and attaching to it...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Creating and starting new container...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  # <\/span><span style=\"color: #D8DEE9\">Create<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">run<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">it<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">gpus<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">all<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">e<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">DISPLAY<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9\">$DISPLAY<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">v<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">tmp<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">X11<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">unix<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #EBCB8B\">tmp<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">X11<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">unix<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">v<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">home<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">sparkone<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\">Downloads<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">mnt<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">host<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">network<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">host<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">hostname<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">sparkdockerrobodk<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">fi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">[<\/span><span style=\"color: #D8DEE9\">sparkone<\/span><span style=\"color: #D8DEE9FF\">@<\/span><span style=\"color: #D8DEE9\">sparktwo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Docker<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #D8DEE9\">$<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">cat<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">start_container_ubuntu_x11forward_0<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sh<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">#<\/span><span style=\"color: #81A1C1\">!\/<\/span><span style=\"color: #D8DEE9\">bin<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">bash<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">of<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">your<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">CONTAINER_NAME<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">ubuntu_for_robodk<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Check<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ps<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">format<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">{{.Names}}<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">grep<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">q<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">^${CONTAINER_NAME}$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Container ${CONTAINER_NAME} does not exist. Please create it first.<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">exit<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Check<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">running<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ps<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">format<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">{{.Names}}<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">grep<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">q<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">^${CONTAINER_NAME}$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Container ${CONTAINER_NAME} is not running. Starting it now...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">$<\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9\">CONTAINER_NAME<\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Attach<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">to<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Attaching to container ${CONTAINER_NAME}...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exec<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">it<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">$<\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9\">CONTAINER_NAME<\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">bin<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">bash<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Exited from container ${CONTAINER_NAME}<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\necho &quot;Script for creating a docker container with X server forwarding enabled, admin user setup, hostname fix, volume mount, and root password change&quot;\necho &quot;This script uses a Dockerfile instead of passing an initial long string argument to the starting bash command, which should allow it to be more reusable&quot;\n\n# Check if the image already exists\nif [[ &quot;$(docker images -q ubuntu_for_robodk 2&gt; \/dev\/null)&quot; == &quot;&quot; ]]; then\n  echo &quot;Image does not exist. Building now...&quot;\n  # Build the Docker image\n  docker build -t ubuntu_for_robodk .\nelse\n  echo &quot;Image already exists. Skipping build step.&quot;\nfi\n\n# Check if the container already exists\nif [[ &quot;$(docker ps -aq -f name=ubuntu_for_robodk)&quot; ]]; then\n  echo &quot;Container already exists. Starting and attaching to it...&quot;\n  docker start -i ubuntu_for_robodk\nelse\n  echo &quot;Creating and starting new container...&quot;\n  # Create and start the container\n  docker run -it \\\n    --gpus all \\\n    -e DISPLAY=$DISPLAY \\\n    -v \/tmp\/.X11-unix:\/tmp\/.X11-unix \\\n    -v \/home\/sparkone\/Downloads:\/mnt\/host \\\n    --network host \\\n    --hostname sparkdockerrobodk \\\n    --name ubuntu_for_robodk \\\n    ubuntu_for_robodk\nfi\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Script for creating a docker container with X server forwarding enabled, admin user setup, hostname fix, volume mount, and root password change<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">This script uses a Dockerfile instead of passing an initial long string argument to the starting bash command, which should allow it to be more reusable<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Check<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">image<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">already<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> [[ <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$(docker images -q ubuntu_for_robodk 2&gt; \/dev\/null)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\"> ]]<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Image does not exist. Building now...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  # <\/span><span style=\"color: #D8DEE9\">Build<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">build<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Image already exists. Skipping build step.<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">fi<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"># <\/span><span style=\"color: #D8DEE9\">Check<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">already<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> [[ <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$(docker ps -aq -f name=ubuntu_for_robodk)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> ]]<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Container already exists. Starting and attaching to it...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Creating and starting new container...<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  # <\/span><span style=\"color: #D8DEE9\">Create<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">container<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">docker<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">run<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">it<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">gpus<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">all<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">e<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">DISPLAY<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9\">$DISPLAY<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">v<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">tmp<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">X11<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">unix<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #EBCB8B\">tmp<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">X11<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">unix<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">v<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">home<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">sparkone<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\">Downloads<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">mnt<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9\">host<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">network<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">host<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">hostname<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">sparkdockerrobodk<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">--<\/span><span style=\"color: #D8DEE9\">name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><span style=\"color: #D8DEE9FF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">ubuntu_for_robodk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">fi<\/span><\/span><\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Well this is one of my first attempts at working with a docker container in order to isolate various AUR packages and perform patches or version control on dependencies, without interfering with package dependencies on my primary system. Up until this point, I have worked with various virutal python environments when experimenting with AI tools<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","om_disable_all_campaigns":false,"pagelayer_contact_templates":[],"_pagelayer_content":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1274","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gazebo Robot Simulator in a Docker Container - SparkOne() Labs Official Site<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gazebo Robot Simulator in a Docker Container - SparkOne() Labs Official Site\" \/>\n<meta property=\"og:description\" content=\"Well this is one of my first attempts at working with a docker container in order to isolate various AUR packages and perform patches or version control on dependencies, without interfering with package dependencies on my primary system. Up until this point, I have worked with various virutal python environments when experimenting with AI tools\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/\" \/>\n<meta property=\"og:site_name\" content=\"SparkOne() Labs Official Site\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61551444286908\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-17T23:44:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-02T05:29:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png?fit=1152%2C896&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1152\" \/>\n\t<meta property=\"og:image:height\" content=\"896\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sparkonelabs\" \/>\n<meta name=\"twitter:site\" content=\"@sparkonelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/person\\\/ee3bd21f007818ac04abf178e749642c\"},\"headline\":\"Gazebo Robot Simulator in a Docker Container\",\"datePublished\":\"2024-08-17T23:44:12+00:00\",\"dateModified\":\"2024-09-02T05:29:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/\"},\"wordCount\":211,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#organization\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/\",\"name\":\"Gazebo Robot Simulator in a Docker Container - SparkOne() Labs Official Site\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#website\"},\"datePublished\":\"2024-08-17T23:44:12+00:00\",\"dateModified\":\"2024-09-02T05:29:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/08\\\/17\\\/gazebo-robot-simulator-in-a-docker-container\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gazebo Robot Simulator in a Docker Container\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#website\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/\",\"name\":\"SparkOne() Labs Official Site\",\"description\":\"SparkOne Labs is a Science, Art and Technology blog. Email: sparkonelabs@sparkonelabs.com\",\"publisher\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#organization\"},\"alternateName\":\"SparkOne Labs\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#organization\",\"name\":\"SparkOne() Labs\",\"alternateName\":\"SparkOne Labs\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo_sparkone_12.png\",\"contentUrl\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo_sparkone_12.png\",\"width\":1152,\"height\":896,\"caption\":\"SparkOne() Labs\"},\"image\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61551444286908\",\"https:\\\/\\\/x.com\\\/sparkonelabs\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/person\\\/ee3bd21f007818ac04abf178e749642c\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\\\/\\\/sparkonelabs.com\\\/home\"],\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gazebo Robot Simulator in a Docker Container - SparkOne() Labs Official Site","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/","og_locale":"en_US","og_type":"article","og_title":"Gazebo Robot Simulator in a Docker Container - SparkOne() Labs Official Site","og_description":"Well this is one of my first attempts at working with a docker container in order to isolate various AUR packages and perform patches or version control on dependencies, without interfering with package dependencies on my primary system. Up until this point, I have worked with various virutal python environments when experimenting with AI tools","og_url":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/","og_site_name":"SparkOne() Labs Official Site","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61551444286908","article_published_time":"2024-08-17T23:44:12+00:00","article_modified_time":"2024-09-02T05:29:52+00:00","og_image":[{"width":1152,"height":896,"url":"https:\/\/i0.wp.com\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png?fit=1152%2C896&ssl=1","type":"image\/png"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@sparkonelabs","twitter_site":"@sparkonelabs","twitter_misc":{"Written by":"admin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/#article","isPartOf":{"@id":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/"},"author":{"name":"admin","@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/person\/ee3bd21f007818ac04abf178e749642c"},"headline":"Gazebo Robot Simulator in a Docker Container","datePublished":"2024-08-17T23:44:12+00:00","dateModified":"2024-09-02T05:29:52+00:00","mainEntityOfPage":{"@id":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/"},"wordCount":211,"commentCount":0,"publisher":{"@id":"https:\/\/sparkonelabs.com\/home\/#organization"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/","url":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/","name":"Gazebo Robot Simulator in a Docker Container - SparkOne() Labs Official Site","isPartOf":{"@id":"https:\/\/sparkonelabs.com\/home\/#website"},"datePublished":"2024-08-17T23:44:12+00:00","dateModified":"2024-09-02T05:29:52+00:00","breadcrumb":{"@id":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sparkonelabs.com\/home\/2024\/08\/17\/gazebo-robot-simulator-in-a-docker-container\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sparkonelabs.com\/home\/"},{"@type":"ListItem","position":2,"name":"Gazebo Robot Simulator in a Docker Container"}]},{"@type":"WebSite","@id":"https:\/\/sparkonelabs.com\/home\/#website","url":"https:\/\/sparkonelabs.com\/home\/","name":"SparkOne() Labs Official Site","description":"SparkOne Labs is a Science, Art and Technology blog. Email: sparkonelabs@sparkonelabs.com","publisher":{"@id":"https:\/\/sparkonelabs.com\/home\/#organization"},"alternateName":"SparkOne Labs","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sparkonelabs.com\/home\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sparkonelabs.com\/home\/#organization","name":"SparkOne() Labs","alternateName":"SparkOne Labs","url":"https:\/\/sparkonelabs.com\/home\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/logo\/image\/","url":"https:\/\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png","contentUrl":"https:\/\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png","width":1152,"height":896,"caption":"SparkOne() Labs"},"image":{"@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61551444286908","https:\/\/x.com\/sparkonelabs"]},{"@type":"Person","@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/person\/ee3bd21f007818ac04abf178e749642c","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/sparkonelabs.com\/home"],"url":"https:\/\/sparkonelabs.com\/home\/author\/admin\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts\/1274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/comments?post=1274"}],"version-history":[{"count":5,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts\/1274\/revisions"}],"predecessor-version":[{"id":1282,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts\/1274\/revisions\/1282"}],"wp:attachment":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/media?parent=1274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/categories?post=1274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/tags?post=1274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}