我的要求是这样的
问)我有一个python
小应用程序,它在docker容器上运行小型flask
服务器。我需要将一个值传递给将从python服务器返回的容器。,但我有时需要更改此传递值,并且我不想每次生成映像时更改此传递值。
为此,我完成了此设置.env
文件并设置了我需要像下面一样传递的环境变量:
这是我的.env
:
MY_NAME=John McBeth
这是我的server.py
:
from flask import Flask
app = Flask(__name__)
import os
PORT = 8083
return_value = os.environ(['MY_NAME']) # value I am getting from .env
@app.route('/')
def hello_world():
return str(return_value)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=PORT)
我正在通过docker-compose.yaml
构建此文件,如下所示:
version: "3.2"
services:
backend:
build: ./backends/banuka
environment:
CHOKIDAR_USEPOLLING: "true"
MY_NAME: ${MY_NAME} // this is where I am passing the value in `.env`
ports:
- 8080:8083
问题::如何为该容器设置一个卷,每次我在.env
中更改此名称时,它都会在之后立即反映出来,而无需再次构建映像并运行?
答案 0 :(得分:0)
将您的docker-compose.yml
更改为:
version: "3.2"
services:
backend:
build: ./backends/banuka
volumes:
- .:/path/to/project
environment:
CHOKIDAR_USEPOLLING: "true"
env_file:
- .env
ports:
- 8080:8083
您可以根据自己的喜好设置/path/to/project
,这将是容器内的路径,.
仅表示当前目录,我想这是您项目的根目录,您可以也将此更改为要安装的计算机中的任何路径。
此外,您可以直接使用.env
选项来设置env_file
文件,这是我的实际建议
https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option
答案 1 :(得分:0)
与docker-compose.yml创建文件
echo "John McBeth" > file_with_env_content
在容器中挂载文件。
version: "3.2"
services:
backend:
build: ./backends/banuka
volumes:
- ./file_with_env_content:/opt/file_with_env_content
environment:
CHOKIDAR_USEPOLLING: "true"
ports:
- 8080:8083
然后更改您的python脚本以从临时文件中读取内容。
from flask import Flask
app = Flask(__name__)
import os
PORT = 8083
#return_value = os.environ(['MY_NAME']) # value I am getting from .env
f = open("/opt/file_with_env_content", "r")
return_value = f.readline() # Write your logic to select any specific line or key value pair etc.
f.close()
@app.route('/')
def hello_world():
return str(return_value)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=PORT)