【问题标题】:Docker file owners and groupsDocker 文件所有者和组
【发布时间】:2019-01-21 16:19:12
【问题描述】:

我觉得我进退两难了。我正在尝试创建一个 Dockerfile 来重现(ROS)漫长而复杂的安装过程,以便我的学生可以更轻松地运行它。

我正在结合提供的各种脚本以及记录在案的手动步骤。手动步骤通常说要执行“sudo”,但我被告知要避免在 Dockerfile 中执行 sudo。所以我将这些步骤移到 Dockerfile 中的 USER 命令之前,因为我被告知这些命令以 root 身份运行。但是,因此创建的文件和目录归 root 所有,我相信后续步骤将失败。

我认为有两个选择:将命令移到 USER 命令之后并包含 sudo 或尝试让安装脚本创建正确所有权的目录和文件。当然,我不知道要创建哪些文件和目录。

这是我的 Dockerfile(实际上是我一直在尝试的众多文件之一。)另外,如果您发现任何其他需要改进或修复的地方,请告诉我!

FROM ubuntu:16.04

# create non-root user
ENV USERNAME ros
RUN adduser --ingroup sudo --disabled-password --gecos "" --shell /bin/bash --home /home/$USERNAME $USERNAME
RUN bash -c 'echo $USERNAME:ros | chpasswd'
ENV HOME /home/$USERNAME

RUN apt-get update && apt-get install --assume-yes wget sudo && \
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && \
chmod 755 ./install_ros_kinetic.sh && \
bash ./install_ros_kinetic.sh

RUN  apt-get install --assume-yes ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation ros-kinetic-interactive-markers

USER $USERNAME
WORKDIR /home/$USERNAME

RUN cd /home/$USERNAME/catkin_ws/src/ && \
  git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git && \
  git clone https://github.com/ROBOTIS-GIT/turtlebot3.git && \
  git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git


# add catkin env
RUN echo 'source /opt/ros/kinetic/setup.bash' >> /home/$USERNAME/.bashrc
RUN echo 'source /home/ros/catkin_ws/devel/setup.bash' >> /home/$USERNAME/.bashrc
# RUN . /home/ros/.bashrc && \ 
#      cd /home/$USERNAME/catkin_ws && \
#      catkin_make

USER $USERNAME
ENTRYPOINT /bin/bash

【问题讨论】:

标签: docker ros


【解决方案1】:

我自己的信息会很有趣,以了解为什么在容器中应避免使用 sudo

过去,我们使用docker 来自动化我们团队中的构建、测试和部署流程,并且始终尝试编写Dockerfiles 尽可能接近原始流程。

假设您在主机中构建一些应用程序并使用sudo 启动一些命令,而有些则没有,我们设法创建了完全相同的Dockerfiles。对此的积极反馈是,您不再有义务编写 readme's 关于如何构建代码 - 您只需提供 Dockerfile 并且每当有人想在非容器环境中重复所有步骤时,他只需遵循(复制/粘贴)文件中的命令。

所以我的建议是 - 首先在 Dockerfile 中安装包,然后切换到用户并继续所有剩余的步骤,必要时使用 sudo。您将拥有用户拥有的所有工件,而不是 root

更新

得到原始的discussionthis 一个。所以听起来您是根据您的特定情况和需求选择最佳方法。

【讨论】:

  • 我喜欢你的提议。我会要求那个说不要做 sudo 的人澄清一下。
猜你喜欢
  • 2022-09-28
  • 2020-01-27
  • 2016-02-04
  • 2017-07-26
  • 2015-05-06
  • 2015-11-30
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多