如何在 docker-compose.yml 中使用多行命令标志配置 MySQL 实例

Mar*_*tin 1 mysql docker docker-compose

我想使用 docker 镜像启动 MySQL 本地实例。

到目前为止我的docker-compose.yml文件如下所示:

version: '3.3'

services:
   db:
     image: mysql:8
     command: --default-authentication-plugin=mysql_native_password
     volumes:
       - ./mysql-dump:/docker-entrypoint-initdb.d
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: admin
       MYSQL_DATABASE: sqlPractice
       MYSQL_USER: admin
       MYSQL_PASSWORD: admin
     ports:
      - '7142:3306'
     security_opt:
      - seccomp:unconfined
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常。我的数据库提供了数据,但在执行一次查询后,如下所示:

SELECT DISTINCT surname, name, data FROM exams e JOIN students s ON e.`id-student` = s.`id-student` WHERE passed='Y' AND (data, `id-centre`) = (SELECT MIN(data), e.`id-centre` FROM exams e JOIN centers c ON e.`id-center` = c.`id-center` WHERE e.passed='Y' AND c.`center-name` = 'IT Institute') 
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

ER_MIX_OF_GROUP_FUNC_AND_FIELDS: In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'sqlPractice.e.id-center'; this is incompatible with sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)

根据这篇文章: 单击 我想sql_mode在我的中设置一个参数docker-compose.yml,因为据称这可以解决问题。

我的docker-compose.yml命令标志中有两个参数,如下所示:

version: '3.3'

services:
   db:
     image: mysql:8
     command: 
       - default-authentication-plugin=mysql_native_password 
       - sql_mode=""
     volumes:
       - ./mysql-dump:/docker-entrypoint-initdb.d
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: admin
       MYSQL_DATABASE: sqlPractice
       MYSQL_USER: admin
       MYSQL_PASSWORD: admin
     ports:
      - '7142:3306'
     security_opt:
      - seccomp:unconfined
Run Code Online (Sandbox Code Playgroud)

但毕竟我在启动时收到错误

db_1  | /usr/local/bin/docker-entrypoint.sh: line 363: exec: default-authentication-plugin=mysql_native_password: not found
Run Code Online (Sandbox Code Playgroud)

毕竟容器无法正常工作。

我想要实现的就是通过param indocker-compose.yml中的这两个参数配置 MySQL 实例,以使我的查询按预期工作。commanddocker-compose.yml

我将不胜感激有关如何实现目标的建议。

Lin*_*nPy 5

命令应该是:

--default-authentication-plugin=mysql_native_password
--sql_mode=
Run Code Online (Sandbox Code Playgroud)

--

并且不能将“”作为值,--sql_mode否则会出现错误:

 Error while setting value '""' to 'sql_mode'
Run Code Online (Sandbox Code Playgroud)


Nic*_*ico 5

services:
  db:
    image: mysql:8
    command: ['--sql_mode=', '--default-authentication-plugin=mysql_native_password']
Run Code Online (Sandbox Code Playgroud)