mysql - Docker为 flask 应用程序撰写数据库url环境变量

标签 mysql docker flask environment-variables

尝试使用 docker-compose.yml 而不是像这样单独启动容器:

docker container run --name mysql -d -e MYSQL_RANDOM_ROOT_PASSWORD=yes -e MYSQL_DATABASE=currency -e MYSQL_USER=currency -e MYSQL_PASSWORD=currency mysql/mysql-server:5.7


docker run --name currency -d -p 8000:5000 --rm --link mysql:dbserver -e DATABASE_URL=mysql+pymysql://currency:currency@dbserver/currency currency:latest

单独运行时,flask 应用程序正确找到 DATABASE_URL 并使用 mysql 数据库。

我使用的 docker-compose.yml 文件如下:

version: "2"
services:
    mysql:
        image: mysql/mysql-server:5.7
        environment:
            - MYSQL_RANDOM_ROOT_PASSWORD:yes
            - MYSQL_DATABASE:currency
            - MYSQL_USER:currency
            - MYSQL_PASSWORD:currency
    currency:
        build: .
        links:
            - "mysql:dbserver"
        ports:
            - "8000:5000"
        environment:
            - DATABASE_URL:"mysql+pymysql://currency:currency@dbserver/currency"

当我使用 docker-compose.yml 时,它没有使用 mysql 数据库。我相信由于 docker-compose.yml 中的一些错误,flask 应用程序无法看到环境变量“DATABASE_URL”。 docker-compose.yml 出了什么问题?

最佳答案

首先:确保使用 links

The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link.
One feature that user-defined networks do not support that you can do with --link is sharing environmental variables between containers. However, you can use other mechanisms such as volumes to share environment variables between containers in a more controlled way.

其次,执行 docker exec -it currency bash 在您的货币容器中打开一个 session ,然后执行 echo "DATABASE_URL='${DATABASE_URL}'"在其中,检查环境变量是否已设置。

最后,检查您的情况是否是排序问题(货币在数据库完全启动之前开始)

参见“Control startup order in Compose”。
例如:

version: "2"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres

关于mysql - Docker为 flask 应用程序撰写数据库url环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675714/

相关文章:

android - 如何在docker-compose.yml中指定* .apk的正确路径并配置appium功能

javascript - 不使用模板引擎的 CSRF 保护 - Javascript 和 Flask

Python Flask 如何使用 Response 从 mongo 查询的生成器提供服务

mysql - 如何在 MySQL 中为 "location"存储 "event"

php - 以两种不同方式分配的两个php变量之间的区别

php - 通过php将csv从mysql保存到服务器

amazon-web-services - AWS CodeBuild 的 Docker Hub 登录(Docker Hub 限制)?

docker - 无法通过标签查看Secure Registry的Docker镜像

python - 运行迁移时出错 : sqlalchemy. exc.CompileError: Postgresql ENUM 类型需要一个名称

mysql查询以获取特定日期之间的记录