mysql - 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)中,它说我可以与另一个用户一起运行图像,但对我来说,这似乎是不可能的。
我是否必须覆盖入口点以一遍又一遍地更改目录,或者我的错误是什么?
解决方案
推荐阅读
- python - 使用 openpyxl 从 Excel 中读取一个大的(>50MB)数据透视表
- python - 在循环中逐行填充数组
- java - 通过 RestTemplate 发送枚举列表
- python - 如何摆脱或忽略 NaN?使用拆分时错误浮动
- azure-devops - 如何将 PR 构建排除为依赖管道的资源?
- javascript - userscript - 如何在 html textarea 元素中编辑样式
- c# - 如何在c#中获取机器的所有ip信息,如ipaddress、ip address wireless和相应的适配器信息?
- python - Pyinstaller 生成的可执行文件非常大
- c - 为什么我尝试调试时我的 Dev C++ 终端窗口不接受输入
- reactjs - @material-ui/core 图标在离线时不显示