python - 如何为Docker设置动态值

标签 python docker

我有一个问题,一旦构建图像,如何动态更改docker中的某些值。

所以基本上我有这个Dockerfile如下。

FROM python:3.7.7

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY server.py /usr/src/app
COPY . /usr/src/app

EXPOSE 8083

# CMD ["python3", "-m",  "http.server", "8080"]
CMD ["python3", "./server.py"]

因此,当前服务器正在按预期工作。但是server.py中有一个动态更改的变量。生成图像后,便无法更改该变量,因为现在已经构建了图像,并且该变量始终引用相同的值。

请参见下面的server.py:
from flask import Flask
app = Flask(__name__)
import linearregression

PORT = 8083

file_path = "./prices.csv" # variable I need to change


predicted_values = linearregression.runModel(file_path)

@app.route('/')
def hello_world():

    return "Predicted Values - " + str(predicted_values)

@app.route('/banuka')
def hi():
    return "Hi Jananath"

if __name__ == '__main__':
   app.run(host='0.0.0.0', port=PORT)

如上所述,我有另一个名为pythonlinearregression.py文件,该文件具有runModel(file_path)方法,该方法接受String格式的参数并返回一些值。

每当我上传其他文件或更改同一文件中的内容时,都必须更改此路径。但由于图像已构建,因此我无法执行此操作。 我该怎么做?

最佳答案

您应该尝试在Dockerfile中使用ENV定义一个变量,并使用'-e'选项启动容器:

FROM python:3.7.7
...
ENV FILE_PATH=prices.csv
...
CMD ["python3", "./server.py"]

并在python代码中:
import os
from flask import Flask
app = Flask(__name__)
import linearregression

PORT = 8083

file_path = os.environ['FILE_PATH'])
....

并运行为:
docker run -e FILE_PATH=/path/to/prices.csv ...

关于python - 如何为Docker设置动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61570748/

相关文章:

python - 从双向链表中删除节点并保持位置不变

python - 关联 .csv 列数据以进行计算

python - 如何迭代 Pandas 数据框行并在每次迭代中创建一个数据框

wordpress - 用Docker开发PHP

python - 在 Pandas DataFrame 中将文本(包含名称和值)列拆分为多列

python - 在 C++ 中使用 jinja2 时的无效结果

docker - 推送到 docker hub 是否总是增加 "pull"计数?

Docker 1.4.1 在 Fedora 21 上启动失败 : FATA[0000] EOF

docker - 在不同于WORKDIR的文件夹的Docker容器中执行脚本

visual-studio - 为什么在 Visual Studio 中结束调试后我的 docker 容器 ASP.NET 核心应用程序不可用