gpt4 book ai didi

docker - 在特定进程的开发环境中以非 root 身份运行 docker

转载 作者:行者123 更新时间:2023-12-01 22:51:44 26 4
gpt4 key购买 nike

我正在继续学习 Docker 以及如何处理图像和容器的道路。我正在制作一张供我在工作中使用的图像。这是 Dockerfile:

FROM ubuntu:trusty
...
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
chown www-data /usr/local/bin/composer && composer --version

RUN composer global require sebastian/phpcpd && \
composer global require phpmd/phpmd && \
composer global require squizlabs/php_codesniffer
...

它有效,但每次我构建图像时,我都会看到关于 composer 以 root 用户身份运行的恼人消息,这一点也不坏,但我想改变这种行为只是为了好玩 :) 和学习。

我想创建并保留(用于其他用途,也可能用于其他任务)用户 docker-dev 来运行此任务。此用户应该有一个 home 目录,composer 应该在这个用户主目录下全局安装库。

现在 composer 安装在 /root/.composer 下,每个库都安装在那里。我想把它变成 /home/docker-dev/.composer 然后在那里安装库。

我已经阅读了很多关于这个主题的文档:

..还有很多,但这是很多信息而且令人困惑。

任何人都可以帮助我在我的 Dockerfile 中创建用户并在其主目录下安装 Composer 库吗?

注意:我已经从 Dockerfile 中删除了不相关的部分,因此帖子不会太长。

更新

在提供解决方案后,这是我尝试但没有成功的方法:

# This still running as root because we need to move composer to /user/local/bin
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
chown www-data /usr/local/bin/composer && composer --version

# I am adding a docker-dev user
RUN useradd docker-dev

# Switch to RUN the next command as the recently created user
USER docker-dev

# Run the command in verbose mode (just for debug)
RUN composer global --verbose require sebastian/phpcpd && \
composer global --verbose require phpmd/phpmd && \
composer global --verbose require squizlabs/php_codesniffer

这是控制台的输出:

Step 8 : RUN composer global --verbose require sebastian/phpcpd &&     composer global --verbose require phpmd/phpmd &&     composer global --verbose require pdepend/pdepend &&     composer global --verbose require squizlabs/php_codesniffer &&     composer global --verbose require phpunit/phpunit
---> Running in 0f203e1760a4

[ErrorException]
chdir(): No such file or directory (errno 2)

Exception trace:
() at phar:///usr/local/bin/composer/src/Composer/Command/GlobalCommand.php:74
Composer\Util\ErrorHandler::handle() at n/a:n/a
chdir() at phar:///usr/local/bin/composer/src/Composer/Command/GlobalCommand.php:74
Composer\Command\GlobalCommand->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:847
Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:192
Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:231
Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:123
Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:104
Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:43
require() at /usr/local/bin/composer:24

global <command-name> [<args>]...

我不确定是不是权限的问题,你怎么看?

最佳答案

在您的 Dockerfile 中 - 使用 RUN创建用户的命令:

RUN useradd userToRunComposer

然后使用 USER创建它之后,在你的 Dockerfile 中添加命令。

USER userToRunComposer
RUN curl -sS https://getcomposer.org/instal...
RUN composer global require se...

您还可以采用不同的方法,在容器内创建用户,然后提交图像:

docker exec -ti <my container name> /bin/bash
userAdd userToRunComposer

然后做一个:docker commit <my container id> <myimagename>避免每次都必须创建用户

参见 this question.

关于docker - 在特定进程的开发环境中以非 root 身份运行 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729513/

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