Я создаю стек приложений, где 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
И служба в моем файле compose:
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 config содержит некоторые параметры кэша, 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) говорится, что я могу запустить образ с другим пользователем, но мне кажется, что это невозможно.
Должен ли я переопределить точку входа, чтобы снова и снова разбивать каталоги, или в чем моя ошибка?