Py学习  »  docker

使用不同于主机上的用户启动Docker容器

Nesan Mano • 5 年前 • 1729 次点击  

我试图在Ubuntu服务器上部署一个映像。问题是,我希望容器的用户不是根用户。换句话说,我想在该用户下启动容器。

我试过的。 我已经成功地在容器中创建了一个具有图像的用户。 我试图用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

.

这是我的档案

 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"]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51394
文章 [ 2 ]  |  最新文章 5 年前
David Maze
Reply   •   1 楼
David Maze    6 年前

显示的Dockerfile将创建两个图像。第一个是平原 debian 与非根用户的映像。第二个忽略了第一个,是一个有点常规的Java映像。

您需要在同一个图像中执行这两个步骤。如果我要写你的案卷的话

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"]
Shardj
Reply   •   2 楼
Shardj    6 年前

我是怎么做到的,我用的不是Ubuntu而是Alpine,但它应该很好:

创建并运行一个名为“developer”的用户

停靠文件

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"]

入口点.sh

# 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工具。