我正在嘗試使用 Dockerfile 在 Python 映像中創建一個名為 SETTINGS 的 ENV VAR。這個環境變數必須是動態的,因為我需要在生產和預生產之間更改組態檔。
我用兩個命令創建了一個腳本 (entrypoint.sh),第一個創建 SETTINGS VAR,第二個是 python 命令。
問題是 python 行正常作業,但 SETTINGS 變數沒有。
腳本
#!/bin/bash
profile=$profile
export SETTINGS=/acalls-service/${profile}.cfg
python -m "_acalls_clasiffier"
exec
檔案
ENTRYPOINT ["/bin/bash", "-c", ". entrypoint.sh"]
我也試過 ["./entrypoint.sh] 但我不作業。
uj5u.com熱心網友回復:
這將是入口點包裝器腳本的一個非常典型的用法。請記住,一個容器只運行一個行程。如果您的 Dockerfile 指定了ENTRYPOINT,那就是程序,并且 將CMD作為附加引數傳遞給它。這使您可以設定一個腳本,該腳本執行一些首次設定,然后用實際命令替換自身:
#!/bin/sh
# Set the environment variable
export SETTINGS=/acalls-service/${profile}.cfg
# Run the CMD
exec "$@"
在您的 Dockerfile 中,您可以將此腳本指定為ENTRYPOINT,然后將實際命令指定為CMD。
ENTRYPOINT ["./entrypoint.sh"] # must be JSON-array syntax
CMD ["python", "-m", "_acalls_clasiffier"] # shell syntax allowed here too
由于您可以輕松提供替代品CMD,因此您可以檢查這是否有效
docker run --rm myimage \
sh -c 'echo $SETTINGS' # <-- run in the container, single-quoted so the
# host shell doesn't expand it
如果您在容器中使用 獲得除錯 shell docker exec,它將看不到變數集,因為它不會通過入口點序列運行。這通常不是一個實際問題。您始終可以docker run使用互動式 shell 而不是 Python 腳本來創建新容器。
uj5u.com熱心網友回復:
在運行時傳遞dynamic環境docker build變數或傳遞變數是有區別的。
運行時環境變數
如果你想在運行時傳遞它,它不需要在你的 Dockerfile 中,只需在運行容器時傳遞它:
docker run my-image -e MY_ENV=foo
構建時的環境變數
在構建期間,您必須:
- 在 Dockerfile 中定義環境變數
- 將 env var 傳遞到構建程序中
示例 Dockerfile:
ARG MY_BUILD_ARG=myDefaultArgument
FROM node:16.9.0
ARG MY_BUILD_ARG
ENV MY_PUBLIC_ENV=${MY_BUILD_ARG}
RUN echo ${MY_PUBLIC_ENV} // => myRandomEnvVar
然后在構建時傳遞它:
docker build --build-arg MY_BUILD_ARG=myRandomEnvVar
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368181.html
上一篇:Heroku、R和Gdal
