Ireedemable Fool
Ireedemable Fool

Reputation: 29

How To Docker Copy to user root ~

I'm writing a Dockerfile to run ROS on my Windows rig and I can't seem to get this COPY command to copy to the container's user root or any sub directory there. I've tried a few things, including messing with the ownership. I know file is ugly but still learning. Not really sure what the issue is here.

This file sits next to a /repos dir which has a git repo within it which can be found here (the ros-noetic branch). This is also the location from which I build and run the container from.

Overall objective is to get roscore to run (which it has been), then exec in with another terminal and get rosrun ros_essentials_cpp (node name) to actually work

# ros-noetic with other stuff added
FROM osrf/ros:noetic-desktop-full
SHELL ["/bin/bash", "-c"]
RUN apt update
RUN apt install -y git
RUN apt-get update && apt-get -y install cmake protobuf-compiler
RUN bash
RUN . /opt/ros/noetic/setup.bash && mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/ && chmod 777 src && catkin_make && . devel/setup.bash
RUN cd /
RUN mkdir /repos
COPY /repos ~/catkin_ws/src
RUN echo ". /opt/ros/noetic/setup.bash" >> ~/.bashrc

Upvotes: 0

Views: 3217

Answers (2)

Czaporka
Czaporka

Reputation: 2407

Expanding tilde to home directory is a shell feature, which apparently isn't supported in Dockerfile's COPY command. You're putting the files into a directory which is literally named ~, i.e. your container image probably contains something like this:

...
dr-xr-xr-x  13 root root     0 Jun  9 00:07 sys
drwxrwxrwt   7 root root  4096 Nov 13  2020 tmp
drwxr-xr-x  13 root root  4096 Nov 13  2020 usr
drwxr-xr-x  18 root root  4096 Nov 13  2020 var
drwxr-xr-x   2 root root  4096 Jun  9 00:07 ~      <--- !!!

Since root's home directory is always /root, you can use this:

COPY /repos /root/catkin_ws/src

Upvotes: 2

Lucas Mior
Lucas Mior

Reputation: 68

You need to pay attention on the docker context. When you build docker, you are adding the path to build your image. If you are not on the / folder, your COPY /repos command won't work.

Try to change the docker context with that:

docker build /

Upvotes: 0

Related Questions