同一个镜像,docker命令能启动mysql但是相应的docker-compose.yml不能,为何?
centos/mysql-56-centos7 i镜像是docker hub上的一个镜像,我用如下两种方式去启动相应容器
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 829edd047341a88cb5052f8635967ab5879f2064b6b1c461e1665529135e75c1 centos/mysql-56-centos7 "container-entrypoint run-mysqld" 49 minutes ago Up 49 minutes 3306/tcp mysql
`
相应日志:
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
我认为这两种是等同的,但是一个成功一个失败怎么回事?
BTW,把.env的环境变量放到docker-compose.yml文件中的 environment 中去也不行
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你的 yaml 里也没指定加载环境变量啊……
要么:
要么:
要么就像楼上的,直接在 YAML 里指定环境变量。
可以打印一下.env 是否生效。
但是docker-compose 一般都是这么设置环境变量,参照下面的写法:
首先,在 docker-compose.yml 文件中直接设置的值优先级是最高的。
然后,是在当前 shell 中 export 的环境变量值。
接下来,是在环境变量文件中定义的值。
再接下来,是在 Dockerfile 中定义的值。
最后,还没有找到相关的环境变量就认为该环境变量没有被定义。
援助
docker-compose里面要写
environment
配置,你整个.env
无效,不会读取