[英]Starting a Docker container with a user different from the one on the host
我正在尝试在Ubuntu服务器上部署映像。 问题是我希望容器具有root以外的用户。 换句话说,我想在该用户下启动容器。
我尝试过的。 我已经在具有图像的容器中成功创建了一个用户。 我尝试使用docker start命令启动容器,但未成功。
我试图用dockerfile内定义的用户创建一个新容器,但它也不成功。
root@juju_dev_server:/home/dev# sudo docker run -it --user dev d08d53c4d78b
docker: Error response from daemon: linux spec user: unable to find user dev: no matching entries in passwd file
。
这是我的dockerfile
FROM debian
RUN groupadd -g 61000 dev
RUN useradd -g 61000 -l -m -s /bin/false -u 61000 dev
USER dev
CMD ["bash"]
FROM java:8
EXPOSE 8080
ADD /target/juju-0.0.1.jar juju-0.0.1.jar
ENTRYPOINT ["java","-jar","juju-0.0.1.jar"]
我是如何做到的,我使用Alpine而不是Ubuntu,但是应该可以正常工作:
以称为“开发人员”的用户身份创建并运行
Docker文件
RUN /bin/bash -c "adduser -D -u 1000 developer"
RUN passwd -d developer
RUN chown -R developer /home/developer/.bash*
RUN echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer
ENTRYPOINT ["/entrypoint.sh"]
CMD ["bash"]
入口点
# stuff I need running as root here. Then below runs a bash shell as "developer"
sudo -u developer -H bash -c "$@;"
我想您想将ENTRYPOINT更改为CMD或类似的名称,或者将其写入到entrypoint.sh中,但是您想启动Java东西。
您显示的Dockerfile将创建两个映像。 第一个是具有非root用户的纯debian
映像。 第二个忽略第一个,它是一个有点常规的Java映像。
您需要在同一张图片中执行这两个步骤。 如果我要编写您的Dockerfile,它可能看起来像
FROM java:8
EXPOSE 8080
# (Prefer COPY to ADD unless you explicitly want its
# auto-unpacking semantics.)
COPY /target/juju-0.0.1.jar juju-0.0.1.jar
# Set up a non-root user context, after COPYing content
# in. (Prevents the application from overwriting
# itself as a useful security measure.)
RUN groupadd -g 61000 app
RUN useradd -g 61000 -l -m -s /bin/false -u 61000 app
USER app
# Set the main container command. (Generally prefer
# CMD to ENTRYPOINT if you’re only using one; it makes
# both getting debugging shells and later adopting the
# pattern of an initializing entrypoint script easier.)
CMD ["java","-jar","juju-0.0.1.jar"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.