2016-10-02 63 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 

,你可以爲你喜歡這種方式,包括個人文件,這可以很方便的配置等