在特定进程

时间:2016-09-27 16:09:52

标签: docker composer-php dockerfile

我正在继续学习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

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

1 个答案:

答案 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>以避免每次都必须创建用户

请参阅this question.