同一个镜像,docker命令能启动mysql但是相应的docker-compose.yml不能,为何?

发布于 2022-09-12 00:36:49 字数 2406 浏览 23 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

睫毛溺水了 2022-09-19 00:36:49

你的 yaml 里也没指定加载环境变量啊……

要么:

version: '2'
services:
  env_file: # 这里
    - .env
  mysql:
    image: centos/mysql-56-centos7:latest
    restart: always
    container_name: mysql

要么:

version: '2'
services:
  environment: # 这里,注意下面的 MYSQL_ROOT_PASSWORD 应该是个空值
    MYSQL_ROOT_PASSWORD:
  mysql:
    image: centos/mysql-56-centos7:latest
    restart: always
    container_name: mysql

要么就像楼上的,直接在 YAML 里指定环境变量。

昔日梦未散 2022-09-19 00:36:49

可以打印一下.env 是否生效。

但是docker-compose 一般都是这么设置环境变量,参照下面的写法:

authz:
 image: xxx/sgt/cmdb-auth:v1.0.0
 volumes:
    - ./cmdb-auth.yaml:/etc/cmdb/service-envoy.yaml
 networks:
 envoymesh:
 aliases:
    - authz
 environment:
    - SERVICE_NAME=-authz
 expose:
    - "80"
还不是爱你 2022-09-19 00:36:49

首先,在 docker-compose.yml 文件中直接设置的值优先级是最高的。
然后,是在当前 shell 中 export 的环境变量值。
接下来,是在环境变量文件中定义的值。
再接下来,是在 Dockerfile 中定义的值。
最后,还没有找到相关的环境变量就认为该环境变量没有被定义。
援助

寂寞笑我太脆弱 2022-09-19 00:36:49

docker-compose里面要写environment配置,你整个.env无效,不会读取

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文