如何在使用docker-compose时将主机用户传递给Dockerfile
我试图在运行Dockerfile
docker-compose build
时将主机variables传递给Dockerfile
我想跑
RUN usermod -u $USERID www-data
在apache-php7
Dockerfile
。 $USERID
是当前主机用户的ID。
我会认为以下可能工作:
命令行
EXPORT USERID=$(id -u); docker-compose build
泊坞窗,compose.yml
... environment: - USERID=$USERID
Dockerfile
ENV USERID RUN usermod -u $USERID www-data
但没有运气呢。
对于Docker来说,在构build阶段通常不可能使用主机环境variables; 这是因为如果您运行docker build
并且使用相同的Dockerfile运行docker build(或Docker Hub运行带有相同Dockerfile的docker build),我们最终会得到相同的图像,而不pipe我们的本地环境如何。
使用docker
命令行(使用-e <var>=<value>
)在运行时传入variables很容易,因为docker-compose
有点复杂,因为该工具旨在创build自包含的环境。
一个简单的解决scheme是在启动容器之前将主机uid放到环境文件中。 也就是说,假设你有:
version: "2" services: shell: image: alpine env_file: docker-compose.env command: > env
那么你可以:
echo HOST_UID=$UID > docker-compose.env; docker-compose up
HOST_UID
环境variables将可用于您的容器:
Recreating vartest_shell_1 Attaching to vartest_shell_1 shell_1 | HOSTNAME=17423d169a25 shell_1 | HOST_UID=1000 shell_1 | HOME=/root vartest_shell_1 exited with code 0
然后你会有一个像ENTRYPOINT
脚本的东西,它将设置容器环境(创build用户,修改文件所有权),使其与给定的UID正确操作。