我有一个问题,一旦构建图像,如何动态更改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)
如上所述,我有另一个名为
python
的linearregression.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/