首页 > 解决方案 > docker:使用特定的 uid:gid 运行 mysql 容器

问题描述

我正在构建一个应用程序堆栈,其中 mysql 是其中一项服务。我希望所有服务都以 uid 1000:1000 运行,所以我对主机系统的权限没有任何问题。

现在我在使用官方 mysql docker 镜像时遇到了问题。

这是我所做的:

FROM mysql:5.7
RUN addgroup --gid 1000 app \
 && adduser --gecos "" --home /home/app --shell /bin/bash --disabled-password --uid 1000 --gid 1000 app \
 && adduser app mysql \
 && adduser mysql app
RUN chown -R app:app /var/lib/mysql && chmod -R g+wrx /var/lib/mysql
COPY mysql.cnf /etc/mysql/conf.d/99-docker.cnf
COPY .my.cnf /home/app/.my.cnf
COPY .root.cnf /root/.my.cnf
RUN chmod 0664 /etc/mysql/conf.d/99-docker.cnf
USER app
EXPOSE 3306

我的撰写文件中的服务:

version: "3"

services:

  mysql:
    build:
      context: ./docker/mysql
      dockerfile: Dockerfile
    env_file:
      - .env
    volumes:
      - ./var/mysql:/var/lib/mysql
    user: 1000:1000
    ports:
      - 3307:3306
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

env 文件包含一些 mysql 的变量:

MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=app
MYSQL_USER=app
MYSQL_PASSWORD=app

.my.cnf 文件包含凭据

mysql 配置包含一些缓存设置、sql-mode 和:

[mysqld]
user=app

启动服务时:docker-compose up --build mysql我收到以下错误:

mysql_1  | Initializing database
mysql_1  | mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
mysql_1  | 2020-04-09T11:11:25.664285Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
mysql_1  | 2020-04-09T11:11:25.664345Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
mysql_1  | 2020-04-09T11:11:25.666725Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
mysql_1  | 2020-04-09T11:11:25.666744Z 0 [ERROR] Aborting
mysql_1  | 
pixel3_mysql_1 exited with code 1

在运行docker-compose run mysql bash和检查我看到的文件时,/var/lib/mysql 目录是 root 拥有的。

在文档(https://hub.docker.com/_/mysql)中,它说我可以与另一个用户一起运行图像,但对我来说,这似乎是不可能的。

我是否必须覆盖入口点以一遍又一遍地更改目录,或者我的错误是什么?

标签: mysqldockerdocker-compose

解决方案


推荐阅读