Команда Docker может запустить контейнер mysql, но docker -compose.yml не может, каковы возможные причины? - PullRequest
0 голосов
/ 09 января 2020

Я хочу запустить контейнер mysql, используя изображение centos / mysql -56-centos7. Есть два способа:

1)

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456  centos/mysql-56-centos7

этот способ отлично работает

2) docker -compose.yml

version: '2'
services:
  mysql:
    image: centos/mysql-56-centos7:latest
    restart: always
    container_name: mysql

и в файле .env я устанавливаю

MYSQL_ROOT_PASSWORD=123456

, но запуск всегда заканчивается неудачей:

CONTAINER ID                                                       IMAGE                            COMMAND                             CREATED             STATUS                          PORTS               NAMES
b651a67ae0b310a7e08ac20919c08583e50a2dc9f515a16618c4db130ea65415   centos/mysql-56-centos7:latest   "container-entrypoint run-mysqld"   55 seconds ago      Restarting (1) 25 seconds ago                       mysql

logs info

mysql    | => sourcing 20-validate-variables.sh ...
mysql    | You must either specify the following environment variables:
mysql    |   MYSQL_USER (regex: '^[a-zA-Z0-9_]+$')
mysql    |   MYSQL_PASSWORD (regex: '^[a-zA-Z0-9_~!@#$%^&*()-=<>,.?;:|]+$')
mysql    |   MYSQL_DATABASE (regex: '^[a-zA-Z0-9_]+$')
mysql    | Or the following environment variable:
mysql    |   MYSQL_ROOT_PASSWORD (regex: '^[a-zA-Z0-9_~!@#$%^&*()-=<>,.?;:|]+$')
mysql    | Or both.
mysql    | Optional Settings:
mysql    |   MYSQL_LOWER_CASE_TABLE_NAMES (default: 0)
mysql    |   MYSQL_LOG_QUERIES_ENABLED (default: 0)
mysql    |   MYSQL_MAX_CONNECTIONS (default: 151)
mysql    |   MYSQL_FT_MIN_WORD_LEN (default: 4)
mysql    |   MYSQL_FT_MAX_WORD_LEN (default: 20)
mysql    |   MYSQL_AIO (default: 1)
mysql    |   MYSQL_KEY_BUFFER_SIZE (default: 32M or 10% of available memory)
mysql    |   MYSQL_MAX_ALLOWED_PACKET (default: 200M)
mysql    |   MYSQL_TABLE_OPEN_CACHE (default: 400)
mysql    |   MYSQL_SORT_BUFFER_SIZE (default: 256K)
mysql    |   MYSQL_READ_BUFFER_SIZE (default: 8M or 5% of available memory)
mysql    |   MYSQL_INNODB_BUFFER_POOL_SIZE (default: 32M or 50% of available memory)
mysql    |   MYSQL_INNODB_LOG_FILE_SIZE (default: 8M or 15% of available memory)
mysql    |   MYSQL_INNODB_LOG_BUFFER_SIZE (default: 8M or 15% of available memory)
mysql    | 
mysql    | For more information, see https://github.com/sclorg/mysql-container

Я думаю, что эти два способа эквивалентно, но сначала они преуспевают, в то время как второй проваливается, почему?

1 Ответ

2 голосов
/ 09 января 2020

В примере Docker Compose вы фактически не устанавливаете переменную окружения. Вам необходимо добавить его явно:

version: '3'
services:
  mysql:
    image: centos/mysql-56-centos7:latest
    environment:
      - MYSQL_ROOT_PASSWORD
    # restart: always  # once it's actually working

Файл .env делает значения доступными для подстановки в файле docker-compose.yml, но не автоматически вставляет их в контейнеры. Вам нужен раздел environment:. Если вы просто перечислите имя переменной, она получит значение из окружения (документация явно не говорит «или .env файл», но я думаю, что это должно работать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...