Как Скопировать Docker в корневой каталог пользователя ~

#bash #docker

Вопрос:

Я пишу файл Dockerfile для запуска ROS на своей установке Windows, и, похоже, я не могу получить эту команду КОПИРОВАНИЯ для копирования в корневой каталог пользователя контейнера или в любой вложенный каталог там. Я пробовал несколько вещей, в том числе возился с правом собственности. Я знаю, что файл уродлив, но все еще учусь. Не совсем уверен, в чем здесь проблема.

Этот файл находится рядом с каталогом /repos, в котором есть репозиторий git, который можно найти здесь (ветвь ros-noetic). Это также место, из которого я создаю и запускаю контейнер.

Общая цель состоит в том, чтобы запустить roscore (что и было сделано), затем войти в систему с другим терминалом и заставить rosrun ros_essentials_cpp (имя узла) фактически работать

 # 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 amp;amp; apt-get -y install cmake protobuf-compiler
RUN bash
RUN . /opt/ros/noetic/setup.bash amp;amp; mkdir -p ~/catkin_ws/src amp;amp; cd ~/catkin_ws/ amp;amp; chmod 777 src amp;amp; catkin_make amp;amp; . devel/setup.bash
RUN cd /
RUN mkdir /repos
COPY /repos ~/catkin_ws/src
RUN echo ". /opt/ros/noetic/setup.bash" >> ~/.bashrc
 

Комментарии:

1. Рассмотрите возможность использования ENV для предоставления $HOME ; см. vsupalov.com/docker-arg-env-variable-guide

Ответ №1:

Расширение тильды в домашний каталог-это функция оболочки, которая, по-видимому, не поддерживается COPY командой Dockerfile. Вы помещаете файлы в каталог с буквальным именем ~ , т. Е. ваш образ контейнера, вероятно, содержит что-то вроде этого:

 ...
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 ~      <--- !!!
 

Поскольку root домашний каталог всегда /root есть , вы можете использовать это:

 COPY /repos /root/catkin_ws/src
 

Ответ №2:

Вам нужно обратить внимание на контекст докера. Когда вы создаете docker, вы добавляете путь для создания своего образа. Если вы не находитесь в / папке, ваша COPY /repos команда не будет работать.

Попробуйте изменить контекст докера с помощью этого:

 docker build /