我正在继续学习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
...
它可以工作,但每次我构建一个图像,我看到关于作为root用户运行的作曲家的烦人的消息,这一点都不错,但我想改变这种行为只是为了好玩:)并学习。
我想创建并保留(用于其他用途,也可能用于其他任务)用户{{1}}来运行此任务。此用户应该有一个docker-dev
目录,home
应该全局安装库,但是在此用户主目录下。
现在,composer安装在composer
下,并且每个库都安装在那里我想把它变成/root/.composer
,然后在那里安装库。
我已经阅读了很多关于这个主题的文档:
还有更多,但这是很多信息,令人困惑。可以帮助我做出这些改变:在我的Dockerfile中创建用户并在其主目录下安装作曲家库吗?
注意:我已从Dockerfile中删除了不相关的部分,因此帖子不会太长。
更新
解决方案提供后,这是我尝试过的但没有成功:
/home/docker-dev/.composer
这是控制台的输出:
# 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
我不确定问题是否是权限,你怎么看?
答案 0 :(得分:1)
在Dockerfile中 - 使用RUN
命令创建用户:
RUN useradd userToRunComposer
然后在创建Dockerfile后使用USER
命令。
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>
以避免每次都必须创建用户