# Out of space for docker load -i

Source: https://forum.modalai.com/topic/1699/out-of-space-for-docker-load-i
Category: Development Drones (https://forum.modalai.com/category/44/development-drones)
Tags: m500
Posted: 2023-01-12 21:03:29 UTC by Cristian Adam
Replies: 5 · Views: 3286

## Cristian Adam · 2023-01-12 21:03:29 UTC

Trying to follow this [ros_environment guide](https://docs.modalai.com/mavros/#ros_environmentsh)

that came about from the [mavros page](https://docs.modalai.com/mavros/) indicating docker is on the drone/needed to run stuff, but [docker-on-voxl](https://docs.modalai.com/docker-on-voxl/) seems to be out of date, so figuring out how to run docker on voxl is being challenging - loading [voxl-docker support](https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-docker-support) seems like it worked correctly however - 
 

unable to run 
```
docker load -i roskinetic-xenial_v1_0.tgz
```
it errors out with:
```

ERRO[0511] Handler for POST /v1.21/images/load returned error: Untar re-exec error: exit status 1: output: write /482b910388d5d604cb01d5c10b07ab3dcf243a34d4f539749fe9249671a41856/layer.tar: no space left on device 
ERRO[0511] HTTP Error                                    err=Untar re-exec error: exit status 1: output: write /482b910388d5d604cb01d5c10b07ab3dcf243a34d4f539749fe9249671a41856/layer.tar: no space left on device statusCode=500
```

I have tried running this from the /data directory where there is space, but I am not sure how to re-map where docker expands images into or if I can (should) use the SD card slot for this instead

There seems to be room on the disk, just not where it's being run from:

```
voxl:/data$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       2.8G  1.8G  939M  66% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   17M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           1.9G  8.0K  1.9G   1% /var/volatile
/dev/sde12       12M  4.1M  7.4M  36% /dsp
/dev/sda2       2.2M   80K  2.0M   4% /persist
/dev/sde11       95M   33M   63M  35% /firmware
/dev/sda3        58M   40K   57M   1% /cache
/dev/sda9        15G  620M   14G   5% /data
tmpfs           378M     0  378M   0% /run/user/0
```

## Reply by Chad Sweet (ModalAI staff) · 2023-01-16 16:37:05 UTC

Just for clarity, which part of the docs seems out of date? That would be our recommended approach. If there is something not working with that document, then maybe we could help there?
https://docs.modalai.com/docker-on-voxl/

## Reply by SMRC · 2023-01-16 19:27:37 UTC (in reply to Chad Sweet)

@Chad-Sweet I'm from the same team as the original poster. To answer the question on what was out of date on  [this page](https://docs.modalai.com/docker-on-voxl/):
-  the references to VOXL-Software-Bundle and VOXL-Factory-Bundle both link to deprecated pages
- the link to Voxl-Quickstart just links to the homepage
- The references to voxl-configure-docker-support.sh are no longer valid because the current version of voxl-docker-support doesn't include that anymore
- We also discovered we needed to run docker manually (it didn't start up on its own), and point it at a different partition for loading images, because otherwise it didn't have enough space. We used the command $docker daemon -g /data. 
- It also would have been useful to explain that docker is now included in the initial drone setup, because we spent a while wondering how to get docker onto the drone, since the old docker-support says it includes a version and the new docker-support says it doesn't.
- also not sure if the section on running a docker image is still valid, as [per my recent post,](https://forum.modalai.com/topic/1713/error-response-from-daemon-cannot-start-container-write-sys-fs-cgroup-cpuset-system-slice-cpuset-cpus-invalid-argument?_=1673890106932) we're having some issues with that.

Thank you for the quick response and for continuing to maintain all this documentation, we appreciate it!

## Reply by Chad Sweet (ModalAI staff) · 2023-01-16 20:30:11 UTC

thanks for the feedback. I just ran through and updated the docs here: https://docs.modalai.com/docker-on-voxl/ 

It worked using the latest platform image

## Reply by tpavlic · 2023-11-10 18:18:48 UTC (in reply to Chad Sweet)

@Chad-Sweet Also, *PLEASE* stop telling people to download the roskinetic-xenial docker image that you host. There is nothing modalAI-specific about your docker image, and forcing people to use xenial means forcing them to use Python 3.5 or lower. Furthermore, rosnoetic is far superior than roskinetic when it comes to ROSv1. There are important features added and bugs fixed in rosnoetic.

On our modalAI drones, we simply do a docker pull of a rosnoetic image (that runs on Ubuntu focal):

```shell
docker pull ros:noetic-robot
```

You can find out more information about pulling a ROS docker image this way at the ROS docker tutorial [here](http://wiki.ros.org/docker/Tutorials/Docker):

http://wiki.ros.org/docker/Tutorials/Docker

Then just run that docker image (using the `docker run -it ...` described at the link above) and start installing other packages you need. For example, we use apt-get to download important ROS packages we need, like mavros, mavros_msgs, etc. and geographic information required. You can follow the nice [ROS with MAVROS installation guide](https://docs.px4.io/main/en/ros/mavros_installation.html) (in the "Binary Installation (Debian/Ubuntu)" section):

https://docs.px4.io/main/en/ros/mavros_installation.html

Of course, you will have to create a MAVROS launcher file within the "launch" folder of a ROS package that is customized to the voxl-mavlink-server/voxl-vision-px4. Here is an example with the correct UDP port:

```text
<launch>
        <!-- vim: set ft=xml noet : -->
        <!-- example launch script for PX4 based FCU's -->

        <!-- <arg name="fcu_url" default="/dev/ttyACM0:57600" /> -->
        <arg name="fcu_url" default="udp://127.0.0.1:14551@:14551" />
        <arg name="gcs_url" default="" />
        <!-- <arg name="tgt_system" default="1" /> -->
        <arg name="tgt_system" default="$(env PX4_SYS_ID)" />
        <arg name="tgt_component" default="1" />
        <arg name="log_output" default="screen" />
        <arg name="fcu_protocol" default="v2.0" />
        <arg name="respawn_mavros" default="true" />
        <!-- <arg name="ns" default="drone_n" /> -->
        <arg name="ns" default="drone$(env PX4_SYS_ID)" />

        <include ns="$(arg ns)" file="$(find mavros)/launch/node.launch">
                <arg name="pluginlists_yaml" value="$(find mavros)/launch/px4_pluginlists.yaml" />
                <arg name="config_yaml" value="$(find mavros)/launch/px4_config.yaml" />
                <arg name="fcu_url" value="$(arg fcu_url)" />
                <arg name="gcs_url" value="$(arg gcs_url)" />
                <arg name="tgt_system" value="$(arg tgt_system)" />
                <arg name="tgt_component" value="$(arg tgt_component)" />
                <arg name="log_output" value="$(arg log_output)" />
                <arg name="fcu_protocol" value="$(arg fcu_protocol)" />
                <arg name="respawn_mavros" default="$(arg respawn_mavros)" />
        </include>
</launch>
```

Finally, you can also install python packages you might need, including pip3 itself (use `apt-get` to install `pip` and then use `pip` to install other packages). Once you're done, installing, you just need to **commit** before exiting your shell. So, in **another terminal** issue:

```shell
docker ps
```

to find the container ID (or at least the first few characters of it) for the currently running rosnoetic container. Then issue:

```shell
docker commit CONTAINER_ID DESIRED_IMAGE_NAME:DESIRED_TAG
```

For example, you might issue:

```shell
docker commit 42c731c5 myproject-rosnoetic-focal:v1.0
```

You can then exit your docker image. You can then remove the original ros-noetic image from your local library (if you wish). You can export your new docker image with:

```shell
docker save myproject-rosnoetic-focal:v1.0 | gzip > myproject-rosnoetic-focal-v1.0.tar.gz
```

Then  transfer that resulting tarball (myproject-rosnoetic-focal-v1.0.tar.gz) to your /data partition on the m500 and use

```shell
docker load -i myproject-rosnoetic-focal-v1.0.tar.gz
```

to load the image onto the VOXL. The resulting image will work just as well as the roskinetic image. You can load it on the VOXL with the ```--net=host``` and ```-v outside_folder:inside_folder:rw``` options (among others) to make sure the docker image has the same network access as the VOXL and allows for a folder (or folders) on the VOXL to be mapped to folders inside the docker image (which makes it easier to develop code for your drone without having to rebuild the docker image each time). I believe that modalAI has documentation on this part.

So, please, ***use a rosnoetic-focal image from ROS directly***. It is crazy to be using a roskinetic image (with xenial!) in 2023 or beyond. Of course, ROSv1 will be deprecated in a couple of years anyway (if that's not pushed). Sadly, if you want a ROSv2 image, you will have to implement a ROS bridge between your docker image and the VOXL until the VOXL gets updated to ROSv2, but rosnoetic is very capable (and much better than roskinetic, especially given that you run rosnoetic on focal (not xenial)).

## Reply by Syed Omair · 2024-05-30 18:44:17 UTC (in reply to tpavlic)

@tpavlic 

heyyy... i do agree that using roskinetic and xenial is kind of a dumb thing... could you help me with something ? are you using the m500 drone with voxl 1 here to do the "docker pull ros:noetic-robot" command? if you are i do get an error saying 

Error: Status 410 trying to pull repository library/ros: "<html>\r\n<head><title>410 Gone</title></head>\r\n<body>\r\n<center><h1>410 Gone</h1></center>\r\n<hr><center>openresty</center>\r\n</body>\r\n</html>\r\n"

 i really kind of want to use the higher versions of python and a more recent ubuntu distribution. 

any tips or suggestions ?
