Docker RUN groupadd&& useradd指令无效

时间:2015-06-02 20:28:39

标签: linux ubuntu docker

我用Dockerfile构建了我的Docker nginx'base'图像,其片段如下:

FROM ubuntu:14.04
MAINTAINER Me <me.net>
RUN apt-get update && apt-get install -y supervisor
ADD supervisord.conf /etc/supervisor/conf.d/
RUN apt-get install -y nginx
..

然后将此图像与数据库容器和数据卷链接。后来,我想将一个用户添加到容器中,以便我可以像这个用户一样运行应用程序,所以我添加了'RUN groupadd -r luqo33&amp;&amp; useradd -r -g luqo33 luqo33'对Dockerfile的指令,以便我的Dockerfile看起来像这样:

FROM ubuntu:14.04
MAINTAINER Me <me.net>

RUN groupadd -r luqo33 && useradd -r -g luqo33 luqo33

RUN apt-get update && apt-get install -y supervisor
ADD supervisord.conf /etc/supervisor/conf.d/
RUN apt-get install -y nginx
..

然后我使用docker build -rm .重新绑定图像,然后使用docker-compose up再次运行整个堆栈(我在docker-compose.yml中配置了堆栈)。

不幸的是,虽然RUN groupadd -r luqo33 && useradd -r -g luqo33 luqo33步骤没有错误输出,但当我输入正在运行的nginx容器的shell时,luqo33用户或luqo33组不存在。然后我从shell执行了相同的命令(groupadd -r luqo33 && useradd -r -g luqo33 luqo33),并按预期添加了组和用户。

为什么Dockerfile中的RUN groupadd -r luqo33 && useradd -r -g luqo33 luqo33在重建时不会将用户和组添加到新容器中?我也尝试docker build --no-cache .具有相同的效果(或缺乏它)。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

要确保您的构建命令没有使用任何缓存层,请使用--no-cache选项。

docker build --no-cache .

如果你想使用docker-compose:

docker-compose build --no-cache

此外,由于您使用 docker-compose 来启动容器,因此请务必运行docker-compose rm,否则docker-compose将重复使用以前构建的图像。