如何将 my.cnf 文件的权限设置为在 Docker 内只读(而不是在客户端的操作系统级别)?

Dav*_*ave 6 mysql permissions my.cnf docker docker-compose

我正在使用 docker-compose v 1.27 和 Docker v 19.03。我的 docker-compose.yml 文件中有这个...

version: '3'
  

services:
  mysql:
    restart: always
    image: mysql:8.0
    cap_add:
      - SYS_NICE  # CAP_SYS_NICE
    environment:
      MYSQL_DATABASE: 'directory_data'
      # So you don't have to use root, but you can if you like
      MYSQL_USER: 'root'
      # You can use whatever password you like
      MYSQL_PASSWORD: 'password'
      # Password for root access
      MYSQL_ROOT_PASSWORD: 'password'
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3406:3306"
    volumes:
      - my-db:/var/lib/mysql
      - ./mysql/mysqlconf:/etc/mysql/conf.d
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
Run Code Online (Sandbox Code Playgroud)

请注意,我没有 Dockerfile(我认为我不需要它)。我的“my.cnf”文件如下

davea$ cat mysql/mysqlconf/my.cnf 
bind-address = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

在 Docker 中,如何将 my.cnf 文件的权限设置为只读?这在 Windows 10 上发挥作用,其中运行“docker-compose up”会导致此警告

mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.
Run Code Online (Sandbox Code Playgroud)

请注意,这个答案 - /sf/ask/4502908231/ have-a-dockerf,不会削减它,因为它依赖于设置 th

con*_*ion 3

我认为这里的根本问题是您正在 ext 文件系统内安装 NTFS 目录卷。以下是一些可能有帮助的解决方案。


Docker 级别:使用只读卷挂载

您可以使用只读卷装载而不是默认的读写设置。

例如,将:ro(只读)添加到卷规范的末尾:

    volumes:
      - ...
      - ./mysql/mysqlconf:/etc/mysql/conf.d:ro
Run Code Online (Sandbox Code Playgroud)

容器级:chmod配置文件

如果要抑制警告,可以尝试通过将配置扩展到多个命令来将运行时文件的权限设置为只读command。不过,我认为这就是您所说的客户端操作系统级别。该挂载不是只读的。

例如:

    command: bash -c "
        chmod -R 0444 /etc/mysql/conf.d/ &&
        mysqld --user=root --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
        "
Run Code Online (Sandbox Code Playgroud)

请注意,这与只读挂载不兼容,因为它是只读文件系统,因此您无法调整权限。