添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

docker-compose不能用flask设置环境变量

5 人关注

运行flask容器,当我试图读取环境变量时,它们并没有被docker compose设置。我使用的是docker-compose文件版本2

compose file:
    services:
             build: ./test
             image: test:1.0
             container_name: test_flask
             ports:
                  - "80:80"
             env_file: .env
             environment:
                  - COUCHDB=http://192.168.99.100:5984
             depends_on:
                  - couchdb

我已经试过用env_file和环境指令? 我还试着把这些值放在双引号、单引号、无引号中,都没有用。 .env文件包含。

  COUCHDB="http://192.168.99.100:5984", also tried without quotes

然后我像这样从Python代码中读取变量。

COUCH_SERVER = os.environ["COUCHDB"]

我还尝试了 os.environ.get('COUCHDB')

none worked.

服务器是这样从Dockerfile中启动的。

CMD service apache2重启

我用命令启动容器。

docker-compose up test

我正在使用Docker for Windows工具箱的版本。

Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      windows/amd64
Server:
 Version:      17.04.0-ce
 API version:  1.28 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Wed Apr  5 18:45:47 2017
 OS/Arch:      linux/amd64
 Experimental: false

谢谢您的帮助

3 个评论
n2o
你的编译文件中的第一行是什么?你所使用的版本是什么? docker-compose config 的输出是什么?我复制了你的版本,在第一行添加了 version: '2' ,看到了你的环境变量
如果你打印所有的env vars,你会看到什么?【替换代码0
docker-compose文件的第一行是 [version: '2'] docker-compose config : test: build: context:D:\dev\uploader container_name: test_flask depends_on: - couchdb environment: COUCHDB。 192.168.99.100:5984 image: test:1.0 ports: - 80:80 版本: '2.0
python
docker
flask
docker-compose
Mezin
Mezin
发布于 2017-06-06
3 个回答
German
German
发布于 2021-01-12
已采纳
0 人赞同

我给你留下一个例子,说明如何从应用程序中获取环境变量。

docker-compose.yml

version: '2'
services:
      image: python:2.7
      environment:
        - BAR=FOO
      volumes:
        - ./app.py:/app.py
      command: python app.py

app.py

import os
print(os.environ["BAR"])
    
谢谢你的回答,遗憾的是我不明白你说的 "项目是你应该做的,以获得环境的价值 "是什么意思。
M.S.Raghunandan
M.S.Raghunandan
发布于 2021-01-12
0 人赞同

我个人认为,环境变量必须在你的docker文件的环境部分下设置名称和值的前缀。至少这是我在Kubernetes部署yaml时的做法

- name: CouchDB 值。"Couch DB URL" - name: "ENV变量1" 值: '变量的一些值

你可以试着进入pod并尝试呼出环境变量,以确定。

正如你所提到的,在你的Python脚本中通过os.environ访问它,应该可以让你开始工作。

Omar Magdy
Omar Magdy
发布于 2021-01-12
0 人赞同

我还有一个例子。
你可以使用Dockerfile传递env变量
Like This ENV SECRET="abcdefg" In the Dockerfile.
So the complete Dockerfile will look like this:

FROM python:3.7.9
LABEL maintainer_name="Omar Magdy"
COPY requirements.txt requirements.txt
ENV SECRET="abcdefg"
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_ENV=development
ENV FLASK_DEBUG=0
CMD ["flask", "run"]

Now in the docker-compose.yml:

version: "3.9"
services:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - "the_data_base:/db"
volumes:
  the_data_base:
    external: true