首页 > 解决方案 > `docker start` 与 `docker run` 的选项

问题描述

我在使用一些 Docker 命令时在概念上遇到了困难。让我们假设,不完全是假设,我正在构建构建所需的图像--privileged。我想不出办法来做到这一点。让我们进一步假设我将需要特权的步骤推迟到第一次运行,然后我忘记--privileged为第一次运行指定。现在我有一个容器 -docker start也不会让我指定--privilegeddocker start当我忘记在 Dockerfile 或使用docker run. 有没有办法解决这些问题?

示例 Dockerfile:

FROM ubuntu:14.04.5

ENV TERM            linux
ENV DEBIAN_FRONTEND noninteractive
ENV REDDIT_USER     reddit

RUN apt-get update 
RUN apt-get install  -y aptitude
RUN aptitude update
RUN aptitude upgrade -o Aptitude::Delete-Unused=1 -y
RUN aptitude install -y vim-nox git screen zsh wget software-properties-common
RUN git clone https://github.com/reddit-archive/reddit
RUN adduser --disabled-password --gecos "" reddit

# can't run this in build; instead, start the image with --privileged and then run the script manually
#RUN echo "y" | ./reddit/install-reddit.sh

CMD ["/bin/bash"]

EXPOSE 80

标签: dockerreddit

解决方案


除非您使用 buildx,否则您不能在构建期间以特权身份运行。但是,您可以做的是使用 对容器进行更改docker run --privileged,然后使用docker commit将其转换回图像:

$ docker run -ti <image>
# do your thing...

$ docker commit <container id> final-image:version

推荐阅读