Как перенаправить журнал mysql в / dev / stdout внутри контейнера? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь написать свой собственный образ док-станции mariadb-alpine. Все работает, файл, но пока я пытаюсь собрать логи mariadb, я ничего не получаю. Я пытался следить за множеством связанных с этим вопросов, таких как this , и пробовал их, но тщетно.

FROM alpine:edge


COPY my.cnf /etc/mysql/my.cnf


RUN set -ex \
    && apk add mariadb mariadb-client shadow \
    && ln -snf /usr/lib/mariadb /usr/lib/mysql \
    && mysql_install_db --user=mysql --skip-name-resolve --auth-root-authentication-method=socket --auth-root-socket-user=root --force --rpm --skip-test-db \
    && usermod -a -G tty mysql \
    && ln -sf /dev/stdout /var/log/mysqld.err \
    && chown -h mysql:mysql /var/log/mysqld.err

CMD ["mysqld_safe"]
EXPOSE 3306

Требуется ли mysqld взять pid = 1 для работы с stdout? В моем случае это как ниже.

# ps aux
PID   USER     TIME  COMMAND
1     root     0:00  {mysqld_safe} /bin/sh /usr/bin/mysqld_safe
134   mysql    0:00  /usr/bin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mariadb/plugin --user=mysql --log-error=/var/log/mysqld.err --pid-file=49ea99ae9348.p
166   root     0:00  sh
171   root     0:00  ps aux

1 Ответ

0 голосов
/ 10 января 2019

Вы, вероятно, сталкиваетесь с этими проблемами:

Что-то с alpine нарушает возможность доступа к / dev / stdout при смене учетных записей пользователей. Обходной путь, который я использовал, включает:

  • Запуск контейнера с tty
  • Добавление пользователя внутри контейнера в группу tty
  • Запуск команды с помощью gosu / exec для замены сценария оболочки pid 1 на ваше приложение

Я не уверен, требовалась ли последняя часть, и у вас может не быть доступа для этого с помощью команды mysql. Вы уже делаете второй пункт. Это просто оставляет первый элемент, который вы можете реализовать:

docker run -t your_image

или в составном файле:

services:
  mysql:
    image: your_image
    tty: true
    ....

Единственный другой вариант - запускать ваше приложение напрямую как mysql, а не запускать его как root с user: mysql в файле compose, но это может не поддерживаться самим mysql.

Если ни одна из этих работ не работает, опция, используемая официальным изображением, состоит в том, чтобы выбрать базовое изображение Debian вместо альпийского изображения. Вы можете увидеть их Dockerfile здесь:

https://github.com/docker-library/mysql/blob/696fc899126ae00771b5d87bdadae836e704ae7d/8.0/Dockerfile

...