Docker составляет переменную среды базы данных url для приложения фляги - PullRequest
0 голосов
/ 06 октября 2018

Попытка использовать 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

При отдельном запуске приложение фляги правильно находит DATABASE_URL и использует mysql db.

Файл 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 приложение фляги не может видеть переменную среды "DATABASE_URL".Что не так в docker-compose.yml?

1 Ответ

0 голосов
/ 06 октября 2018

Первое: убедитесь, что не использует ссылки

Флаг --link является устаревшей функцией Docker.Это может в конечном итоге быть удалено.Если вам не нужно продолжать его использование, мы рекомендуем вам использовать пользовательские сети для облегчения связи между двумя контейнерами вместо использования --link.
Одна функция, которую пользователь-определенные сети не поддерживают то, что вы можете делать с --link разделяет переменные окружения между контейнерами.Однако вы можете использовать другие механизмы, такие как тома, для более общего управления переменными среды между контейнерами.

Во-вторых, выполните docker exec -it currency bash, чтобы открыть сеанс в вашем контейнере валюты, и выполнитеecho "DATABASE_URL='${DATABASE_URL}'" в нем, чтобы проверить, установлена ​​ли переменная среды.

Наконец, проверьте в вашем случае, является ли это проблемой заказа (валюта, начинающаяся с до , база данных полностью загружена)

См. " Управление порядком запуска в 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
...