gpt4 book ai didi

docker - Docker以用户身份而不是以root身份生成shell

转载 作者:行者123 更新时间:2023-12-02 21:18:03 24 4
gpt4 key购买 nike

通常,当我使用docker容器作为我的开发测试库来开发应用程序时,我需要通过以下命令在shell中手动运行composer,phpunit,npm,bower和各种开发脚本:

docker exec -ti /bin/sh

但是当生成 shell 程序时,将使用root权限生成。我想要实现的是生成一个没有root权限但具有指定用户权限的shell。

我该怎么做?

在我的情况下,我的 Dockerfile具有以下条目:
FROM php:5.6-fpm-alpine

ARG UID="1000"
ARG GID="1000"

COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
COPY ./fpm.conf /usr/local/etc/php-fpm.d/zz-docker.conf


RUN chmod +x /usr/local/bin/entrypoint.sh &&\
addgroup -g ${GID} developer &&\
adduser -D -H -S -s /bin/false -G developer -u ${UID} developer


ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"]

然后,我将从主机开发的项目的目录挂载到 /var/www/html中,并保留用户权限,因此我只需要以下 docker-compose.yml即可构建它:
version: '2'
services:

php_dev:
build:
context: .
dockerfile: Dockerfile
args:
XDEBUG_HOST: 172.17.0.1
XDEBUG_PORT: 9021
UID: 1000
GID: 1000
image: pcmagas/php_dev
links:
- somedb
volumes:
- "$SRC_PATH:/var/www/html:Z"

通过将 UIDGID设置为主机的用户ID和组ID并使用以下配置形式fpm进行抽水:
[global]
daemonize = no

[www]
listen = 9000
user = developer
group = developer

我设法对我的代码进行任何更改,而不必担心对用户意愿的神秘更改。但是我希望能够以开发人员身份在正在运行的 php_dev容器内生成一个 shell ,以便将来任何诸如 composernpm之类的工具都可以在适当的用户权限下运行。

当然,我想同样的原则也适用于其他语言,例如python的 pip

最佳答案

如果您需要以非root用户身份运行容器,则必须在Dockerfile中添加以下行:

USER developer

请注意,为了通过 docker-compose.yml挂载目录,您必须通过执行以下命令在运行 docker-compose up之前更改该目录的权限。
chown UID:GID /path/to/folder/on/host
UIDGID应该与用户容器的 UIDGID相匹配。
这将使用户能够读写装载的卷而不会出现任何问题

阅读有关 USER指令的更多信息

关于docker - Docker以用户身份而不是以root身份生成shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49018143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com