Docker - не удается запустить ошибку разрешения mysql

У меня проблема с докером и mysql. Я создал образ на основе phusion/baseimage. Я хочу создать образ, в котором каталог /var/lib/mysql используется совместно с моим хостом (OS X), потому что я не хочу хранить свои данные в контейнере.

Все работает нормально, когда каталог /var/lib/mysql не является общим. Когда я делюсь этим каталогом, служба mysql не может запуститься. В логах есть информация о проблемах с разрешениями при запуске.

Результат ls -la из /var/lib:

[...]
drwxr-xr-x  1 lc      staff    170 Jan  3 16:55 mysql
[...]

Пользователь mysql должен быть владельцем. Я пытался сделать:

sudo chown -R mysql:mysql mysql/

Но эта команда не вернула никакой ошибки и не сменила владельца.

Я также попытался добавить своего пользователя (из контейнера) в группу mysql:

lc@cbe25ac0681e:~$ groups lc
lc : lc sudo mysql

Но это тоже не сработало. Кто-нибудь знает, как решить эту проблему?

Мой файл docker-compose.yml:

server:
  image: lukasz619/light-core_server
  ports:
    - "40080:80"
    - "40022:22"
    - "40443:443"
    - "43306:3306"
  volumes:
     - /Users/lukasz/Workspace/database/mysql:/var/lib/mysql

Это мой Dockerfile:

FROM phusion/baseimage

RUN apt-get update
RUN apt-get install -y apache2

# Enable SSH
RUN rm -f /etc/service/sshd/down
RUN /etc/my_init.d/00_regen_ssh_host_keys.sh

# public key for root
ADD public_key.pub /tmp/public_key.pub
RUN cat /tmp/public_key.pub >> /root/.ssh/authorized_keys && rm -f /tmp/public_key.pub

EXPOSE 80
CMD ["/sbin/my_init"]
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

person Lucas    schedule 03.01.2016    source источник


Ответы (2)


Когда мы говорим, что пользователи совместно используются контейнером и хостом, это не совсем верно; это UID, которые на самом деле являются общими. Это означает, что пользователь с именем mysql в контейнере, скорее всего, имеет другой UID, чем пользователь mysql на хосте.

Мы можем попытаться исправить это, используя изображение для установки разрешений:

docker run --user root lukasz619/light-core_server chown -R mysql:mysql /var/lib/mysql

Это может работать, в зависимости от того, как вы настроили изображение. Существует также еще одна сложность, связанная с работающей между ними виртуальной машиной.

person Adrian Mouat    schedule 03.01.2016
comment
Надеюсь, вы понимаете мой английский, потому что я из Польши ;) Я добавил в свой предыдущий пост содержимое Dockerfile. Да, я знаю, что на хосте и в контейнере разные пользователи. Я выполнил эту команду: sudo chmod -R mysql:mysql mysql/ В контейнере.. Я запустил ее через SSH. То, что вы написали, это то же самое, что и я, я думаю. После того, как я создал образ, я подключился к контейнеру через SSH, и там я установил mysql и т. д. Когда я установил mysql, я проверил, правильно ли он работает (+ сохранен с помощью docker commit), а затем Я начал работать над совместным использованием /var/lib/mysql с моим хостом. - person Lucas; 04.01.2016
comment
Вы запустили chmod, а не chown. Контейнеры обычно не используют sudo или SSH, поэтому я предположил, что вы работаете на хосте. - person Adrian Mouat; 04.01.2016
comment
Знаю, забыл написать в первом посте про SSH. И там была опечатка - я имел в виду Chown в моем первом посте (не chmod) :) Chown не работает.. - person Lucas; 04.01.2016
comment
Это не может быть Dockerfile — вы не установили mysql или не создали пользователя mysql. Мне не очень нравится то, что ты сделал. Было бы намного лучше использовать официальные образы mysql и apache, чем создавать свои собственные. Вы можете использовать docker exec вместо SSH в обычном режиме. - person Adrian Mouat; 04.01.2016

Проблема в OS X. Я запустил этот docker-composer.yml

server:
  image: lukasz619/light-core_server
  ports:
    - "40080:80"
    - "40022:22"
    - "40443:443"
    - "43306:3306"
  volumes:
      - /var/mysql:/var/lib/mysql

Можно обмениваться каталогами (и делать chown) ТОЛЬКО между boot2docker и контейнером, но не работает должным образом между Os X и контейнером.

person Lucas    schedule 04.01.2016
comment
Хм, я подозреваю, что это проблема или, по крайней мере, связана с ней, но обратите внимание, что OP использует каталог в / Users, который должен быть смонтирован на виртуальной машине. - person Adrian Mouat; 04.01.2016
comment
Извините, только что заметил, что вы сами отвечаете на свой вопрос. Вы должны обнаружить, что если вы запускаете docker-machine ssh default для входа в виртуальную машину, ваши каталоги монтируются под /Users, поэтому вы можете обмениваться каталогами между MacOS и контейнером (я делаю это все время). - person Adrian Mouat; 04.01.2016
comment
Я знаю, и я видел, что /Users смонтированы на виртуальной машине. Но проблема заключалась в том, что я не могу изменить какие-либо привилегии в этом каталоге. Что бы я ни делал, я не вижу никаких изменений. Я могу изменить привилегии для каталогов, совместно используемых с виртуальной машины, на контейнер (например, с /var/mysql (VM) на /var/lib/mysql (контейнер)). - person Lucas; 05.01.2016