python - 如何在AWS ECS上的Flask/MongoDB中设置环境变量?

标签 python mongodb docker flask amazon-ecs

我有一个与 MongoDB 一起运行的 Flask 应用程序。

在本地,当我使用下面的代码构建并运行容器时,该应用程序在本地运行得非常好。

docker-compose build
docker-compose up

这些是创建的容器:

/application$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
9e054b28bb46        application_web     "/bin/sh -c 'python …"   38 seconds ago      Up 37 seconds       0.0.0.0:80->80/tcp, 27017/tcp   application_web_1
2a19a8e9a267        mongo:3.0.2         "/entrypoint.sh mong…"   39 seconds ago      Up 38 seconds       0.0.0.0:27017->27017/tcp        application_db_1

我的 app.py 中有以下内容:

MONGODB_HOST = os.environ['DB_PORT_27017_TCP_ADDR']
MONGODB_PORT = 27017

app = Flask(__name__)
bootstrap = Bootstrap(app)
client = MongoClient(MONGODB_HOST, MONGODB_PORT)

docker-compose.yml

web:
  build: .
  command: python -u app.py
  ports:
    - "80:80"
  volumes:
    - .:/project
  environment:
    MONGODB_HOST: db
  links:
      - db

db:
  image: mongo:3.4
  command: mongod
  ports:
    - "27017:27017"

Dockerfile

FROM python:3.6.1-alpine

MAINTAINER <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ff929a9d9e8d94969e94979e939693bf98929e9693d19c9092" rel="noreferrer noopener nofollow">[email protected]</a>

WORKDIR /project

ADD . /project

RUN pip install -r requirements.txt

EXPOSE 80

EXPOSE 27017

CMD ["mongod"]

ENV NAME Cheppers_DevOps_Challenge

ENTRYPOINT python app.py

我面临的问题是,将镜像推送到 AWS ECS 后,然后使用给定的容器镜像推送存储库创建集群,我总是在任务定义日志中收到此错误:

2019-10-08 14:19:02
MONGODB_HOST = os.environ['DB_PORT_27017_TCP_ADDR']
KeyError: 'DB_PORT_27017_TCP_ADDR'

最佳答案

我建议你更改 mongo 主机:

MONGODB_HOST = "db"

这个os.environ['DB_PORT_27017_TCP_ADDR']将使用自 compose 以来您不需要的容器的 IP 地址将使用服务名称为您处理该问题。

我认为AWS以不同方式处理 IP 地址,而不是 dict不再(“KeyError”)

关于python - 如何在AWS ECS上的Flask/MongoDB中设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58286330/

相关文章:

python - 在 Python/Pandas 中,如何将世纪月转换为 DateTimeIndex?

python - 将列表随机划分为两个互补的子列表

spring - Spring Batch 的 Mongo 存储库?

Perl Mongo 查找对象 ID

asp.net - 已导入多个具有相同标识的程序集 : '<in-memory assembly>' and '<in-memory assembly>'

python - 使用 suds 访问响应 soap header

python - 与python26链接的visual studio中的编译错误

node.js - Mongoose 模型 - 包括 GridFS 图像引用

docker - 为Wso2 DAS创建Docker

image - 我启动Docker容器后立即退出