2016-10-02 65 views
4

当我运行码头集装箱时,我想发送动态文件名作为一些环境变量。如何添加动态文件到码头集装箱

这是在容器中可访问,所以它在我们'回声'时打印它的值。

但ADD命令不添加该文件。

Dockerfile:

ADD $filename ./ 
echo ls # Not showing file 

搬运工运行-e文件名= '/路径/到/ file.extension'

回答

2

尝试使用volume代替:

$ echo "hello world" > somefile.txt 
$ docker run -it --rm -v $PWD/somefile.txt:/data/somefile.txt alpine cat /data/somefile.txt 
hello world 

的Dockerfile列出了在运行“docker build”时发生的操作。在运行时无法传入环境变量,因为此时图像已经建好:-)

+0

体积的方法是一个好主意,谢谢你添加尽可能多的卷。请注意,您可以通过'docker run --env'和'docker run --env-file'命令在运行时为您的容器设置环境变量。有用的技术 - 特别有助于保持Docker镜像中的env-local设置和密码/其他秘密。 –

+0

@ChrisJohnson我完全同意,并且使用环境变量由12 Factor网站(https://12factor.net/config)推荐。但是在这种情况下,试图在Dockerfile中使用环境变量,只能在Docker构建期间支持某些内容。由于这个问题得到了回答,Docker现在支持构建参数,请参阅:https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg –

0

ADD在编译(构建)时间期间运行。当你运行docker exec -e,这是容器建成后。

您无法添加动态文件,因为它已编译。以前关于卷的命令是正确的,因为您可以在exec期间临时提供这些文件,并让应用程序选取它们。

1

要添加到马克的答案。

如果您想使用docker-compose.yml文件(如果您计划反复运行容器,这是一个好主意)。

mysql: 
    image: mysql 
    volumes: 
    - /someLocalFolder/lib/mysql/:/var/lib/mysql 

,你可以为你喜欢这种方式,包括个人文件,这可以很方便的配置等