【发布时间】:2020-12-25 09:55:30
【问题描述】:
我想部署一个烧瓶+gunicorn 项目,我是 Docker 的新手。到目前为止,我有一个 Dockerfile 如下。
# Pull official base image
FROM python:3.7-slim-buster
# Set work directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Set environment variables
ENV REDIS_HOST [...omit here...]
ENV REDIS_PORT [...omit here...]
ENV REDIS_DB_WHITELIST [...omit here...]
ENV MYSQL_HOST [...omit here...]
ENV MYSQL_PORT [...omit here...]
ENV MYSQL_DB_DUMMY [...omit here...]
# Copy project
COPY . /usr/src/app/
# Install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN pip install gunicorn
EXPOSE 5000
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["sh", "entrypoint.sh"]
还有一个 docker-compose.yml 如下。
version: "3.9"
secrets:
FLASK_SECRET_KEY:
external: true
MYSQL_USER:
external: true
MYSQL_PASSWORD:
external: true
services:
web:
image: flask-app:v0.1.0
environment:
FLASK_SECRET_KEY_FILE: /run/secrets/FLASK_SECRET_KEY
MYSQL_USER_FILE: /run/secrets/MYSQL_USER
MYSQL_PASSWORD_FILE: /run/secrets/MYSQL_PASSWORD
ports:
- "5000:5000"
secrets:
- FLASK_SECRET_KEY
- MYSQL_USER
- MYSQL_PASSWORD
在我搜索完之后,似乎访问 docker 机密的唯一方法是使用 docker stack deploy --compose-file=docker-compose.yml flask-app 命令。显然,我有三个敏感数据 FLASK_SECRET_KEY、MYSQL_USER、MYSQL_PASSWORD 需要存储在 Docker 机密中。原来app一直无法运行,我假设python脚本中的mysql_user = os.environ['MYSQL_USER']等无法访问环境变量。
我不知道通过 Dockerfile 或 docker-compose.yml 从 Docker 机密访问敏感数据的正确方法,如果我有错误,请纠正我。
【问题讨论】:
标签: python docker-compose dockerfile docker-swarm