首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker命令可以启动mysql容器,docker-compose.yml却不能启动,可能的原因是什么?

Docker命令可以启动mysql容器,docker-compose.yml却不能启动,可能的原因是什么?
EN

Stack Overflow用户
提问于 2020-01-09 18:39:46
回答 1查看 63关注 0票数 0

我想使用centos/ mysql -56-centos7镜像启动一个mysql容器。有两种方法:

1)

代码语言:javascript
运行
复制
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456  centos/mysql-56-centos7

这种方式很好用

2) docker-compose.yml

代码语言:javascript
运行
复制
version: '2'
services:
  mysql:
    image: centos/mysql-56-centos7:latest
    restart: always
    container_name: mysql

在.env文件中,我设置了

代码语言:javascript
运行
复制
MYSQL_ROOT_PASSWORD=123456

但是开始总是失败的:

代码语言:javascript
运行
复制
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

日志信息

代码语言:javascript
运行
复制
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

我认为这两种方式是等价的,但它们首先成功,第二种方式失败,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-09 19:14:13

在Docker Compose示例中,您实际上并没有设置环境变量。您需要显式添加它:

代码语言:javascript
运行
复制
version: '3'
services:
  mysql:
    image: centos/mysql-56-centos7:latest
    environment:
      - MYSQL_ROOT_PASSWORD
    # restart: always  # once it's actually working

.env文件makes values available for substitution位于docker-compose.yml文件中,但不会自动将它们注入容器中。您需要一个environment:部分。如果只列出一个变量名,它就会从环境中获取值(文档中没有明确说明“或一个.env文件”,但我认为它应该可以工作)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59662109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档