H5W3
当前位置:H5W3 > 其他技术问题 > 正文

同一个镜像,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 中去也不行

回答:

你的 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 里指定环境变量。

回答:

可以打印一下.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"

回答:

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

回答:

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

本文地址:H5W3 » 同一个镜像,docker命令能启动mysql但是相应的docker-compose.yml不能,为何?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址