2016-03-20 2 views
4

Я запускаю Docker 1.8.1 в OSX 10.11 через локальную док-машину VM.Неверные разрешения в объеме в контейнере Docker

У меня есть следующие Докер-compose.yml:

web: 
    build: docker/web 
    ports: 
     - 80:80 
     - 8080:8080 
    volumes: 
     - $PWD/cms:/srv/cms 

Мои Dockerfile выглядит следующим образом:

FROM alpine 

# install nginx and php 
RUN apk add --update \ 
    nginx \ 
    php \ 
    php-fpm \ 
    php-pdo \ 
    php-json \ 
    php-openssl \ 
    php-mysql \ 
    php-pdo_mysql \ 
    php-mcrypt \ 
    php-ctype \ 
    php-zlib \ 
    supervisor \ 
    wget \ 
    curl \ 
    && rm -rf /var/cache/apk/* 

RUN mkdir -p /etc/nginx && \ 
    mkdir -p /etc/nginx/sites-enabled && \ 
    mkdir -p /var/run/php-fpm && \ 
    mkdir -p /var/log/supervisor && \ 
    mkdir -p /srv/cms 

RUN rm /etc/nginx/nginx.conf 
ADD nginx.conf /etc/nginx/nginx.conf 
ADD thunder.conf /etc/nginx/sites-enabled/thunder.conf 

ADD nginx-supervisor.ini /etc/supervisor.d/nginx-supervisor.ini 

WORKDIR "/srv/cms" 
VOLUME "/srv/cms" 

EXPOSE 80 
EXPOSE 8080 
EXPOSE 22 

CMD ["/usr/bin/supervisord"] 

Когда я бегу все с docker-compose up все работает отлично, мои объемы установлены на правильный место.

Но разрешения в установленной папке/srv/cms выглядят неправильно. Пользователь «1000», а группа «50» в контейнере. Веб-сервер не мог создавать файлы в этой папке, потому что он работает с пользователем «root».

+0

Если он работает с 'root', то он должен иметь возможность писать любую папку. У вашей конфигурации супервизора указан другой пользователь? Является ли 'uid 1000' и' gid 50' пользователем на вашей ОС X? –

ответ

5

1) Общая идея: Докер это не бродяга. Неправильно вставлять две разные службы в один контейнер! Разделите его на два разных изображения и соедините их вместе. Не делай этого дерьмового изображения.

Проверить и следовать https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

  • Избегайте установки ненужных пакетов
  • Выполнить только один процесс в контейнере
  • минимизировать количество слоев

Если вы делаете это:

  • вы удалите ваш руководитель
  • ваши могут уменьшить количество слоев

Это должно быть что-то подобное (например):

FROM alpine 

RUN apk add --update \ 
    wget \ 
    curl 
RUN apk add --update \ 
    php \ 
    php-fpm \ 
    php-pdo \ 
    php-json \ 
    php-openssl \ 
    php-mysql \ 
    php-pdo_mysql \ 
    php-mcrypt \ 
    php-ctype \ 
    php-zlib 
RUN usermod -u 1000 www-data 
RUN rm -rf /var/cache/apk/* 

EXPOSE 9000 

Для Nginx достаточно использовать изображение по умолчанию и установить конфигу. докер-Compose файл как:

nginx: 
    image: nginx 
    container_name: site.dev 
    volumes: 
    - ./myconf1.conf:/etc/nginx/conf.d/myconf1.conf 
    - ./myconf2.conf:/etc/nginx/conf.d/myconf2.conf 
    - $PWD/cms:/srv/cms 
    ports: 
    - "80:80" 
    links: 
    - phpfpm 
phpfpm: 
    build: ./phpfpm/ 
    container_name: phpfpm.dev 
    command: php5-fpm -F --allow-to-run-as-root 
    volumes: 
    - $PWD/cms:/srv/cms 

2) Добавить RUN usermod -u 1000 www-data в Dockerfile для PHP контейнера, он исправит проблему с разрешения.

+1

Alpine не поддерживает 'usermod' из коробки. Вам нужно установить пакет «shadow» из ветви 'test'. –

Смежные вопросы