#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 /