【发布时间】:2018-08-07 15:48:57
【问题描述】:
通常当我使用 docker 容器作为开发测试基础开发应用程序时,我需要通过以下命令在其中手动运行 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"
通过将 UID 和 GID 设置为我的主机的用户 ID 和组 ID 并使用以下配置格式 fpm 来实现:
[global]
daemonize = no
[www]
listen = 9000
user = developer
group = developer
我设法对我的代码进行任何更改,而不必担心对用户兴趣的神秘更改。但我希望能够以开发者用户身份在运行的php_dev 容器内生成一个shell,以便将来的任何工具(如composer 或npm)都将以适当的用户权限运行。
当然,我想同样的原则也适用于其他语言以及 python 的示例pip
【问题讨论】:
-
您是否尝试在入口点之前添加此行?
USER developer -
那你为什么不能以另一个用户的身份运行
composer或npm?su命令很容易运行。 -
@Mike 直接以用户身份运行shell更方便。
-
@Mostafa Hussein 您的解决方案似乎有效。
-
@DimitriosDesyllas 我已经提交了完整的答案以及您可能需要的更多解释
标签: docker containers root