使用docker-compose时如何将主机用户传递给Dockerfile

马克斯·吉尔肯斯(Max Girkens)

我正在尝试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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将 ARG 传递给 docker-compose.yml 中的 Dockerfile

如何将参数传递给docker中的超级用户?

使用lapply时如何将参数传递给用户定义的函数

从docker-compose.yml文件将变量传递给Dockerfile

使用Docker时如何将文件写入主机?

使用COMPS时如何将属性传递给Java

如何将 docker run 命令行 arg 传递给 docker-compose?

如何将GitLab CI文件变量传递给Dockerfile和Docker容器?

在构建时使用docker-compose将环境变量传递给docker映像

如何将端口映射动态传递给 docker-compose up 命令?

如何将命令行参数传递给docker-compose run?

如何将环境变量传递给docker-compose的应用程序

使用 PostgreSQL 改造 AWS Lambda——如何将主机名传递给 lambda?

如何将Dockerfile转换为Docker Compose镜像?

如何将docker-compose.yml转换为Dockerfile

如何正确编写Dockerfile,并在主机非root用户/ uid下使用docker-compose(最佳实践)?

使用Docker compose传递Dockerfile的参数

如何使用 ClearScript 将 JavaScript 数组传递给主机?

如何将主机和端口参数传递给ant以供Java主要功能使用

如何将参数传递给docker运行空格

如何将配置文件传递给 docker 容器?

如何将动态值传递给Docker容器?

如何将jenkins凭证传递给docker build命令?

如何将系统属性传递给Docker容器?

如何将环境变量传递给Docker容器?

如何将多行变量传递给Docker容器?

如何将值传递给Docker文件

如何将嵌套命令传递给Docker运行?

如何将args传递给docker run for python?