docker: запустить mysql контейнер с указанием c uid: gid - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю стек приложений, где 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) говорится, что я могу запустить образ с другим пользователем, но мне кажется, что это невозможно.

Должен ли я переопределить точку входа, чтобы снова и снова разбивать каталоги, или в чем моя ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...