如何在使用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正确操作。