我正在尝试Dockerfile
在运行时将主机变量传递给docker-compose build
我想跑步
RUN usermod -u $USERID www-data
在一个apache-php7
Dockerfile
。$USERID
是当前主机用户的ID。
我本以为以下方法可能会起作用:
命令行
EXPORT USERID=$(id -u); docker-compose build
docker-compose.yml
...
environment:
- USERID=$USERID
Docker文件
ENV USERID
RUN usermod -u $USERID www-data
但是还没有运气。
通常,对于Docker而言,通常无法在构建阶段使用主机环境变量。这是因为,如果您运行docker build
并且我docker build
使用相同的Dockerfile(或Docker Hub使用相同的Dockerfile运行`docker build),则无论我们的本地环境如何,我们最终都将拥有相同的映像。
尽管使用命令行在运行时传递变量很容易docker
(使用-e <var>=<value>
),但使用则要麻烦一些docker-compose
,因为该工具旨在创建自包含的环境。
一个简单的解决方案是在启动容器之前将主机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
环境变量将对您的容器可用:
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
脚本的内容,该脚本将设置容器环境(创建用户,修改文件所有权)以在给定的UID下正确运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句