Докер сочинения томов Разрешения Linux - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь запустить WordPress в контейнере Docker, мой файл docker-compose.yaml:

version: "2"
services:
  my-wpdb:
    image: mariadb
    ports:
      - "8081:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ChangeMeIfYouWant
  my-wp:
    image: wordpress
    volumes:
      - ./:/var/www/html
    ports:
      - "8080:80"
    links:
      - my-wpdb:mysql
    environment:
      WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

Когда я создаю структуру Docker, том монтируется, но принадлежит root.

Iпопытался изменить это с помощью:

my-wp:
  image: wordpress
  user: 1000:1000    # added
  volumes:
    - ./:/var/www/html
  ports:
    - "8080:80"
  links:
    - my-wpdb:mysql
  environment:
    WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

Теперь я могу редактировать файлы.Но тогда контейнер больше не обслуживает веб-сайт.

Как правильно решить эту проблему с разрешением?

1 Ответ

0 голосов
/ 23 октября 2018

Согласно справке docker-compose и docker run , опция user устанавливает идентификатор пользователя (и идентификатор группы) процесса, выполняющегося в контейнере.Если вы установите значение 1000:1000, ваш веб-сервер больше не сможет подключаться к порту 80.Привязка к порту ниже 1024 требует корневых разрешений.Это означает, что вам следует снова удалить добавленный оператор user: 1000:1000.

Чтобы решить проблему с правами доступа для общего тома, вам нужно изменить владельца каталога.Запустите chown 1000:1000 /path/to/volume.Это может быть выполнено внутри контейнера или непосредственно в хост-системе.Изменение является постоянным и вступает в силу немедленно (не требуется перезапуск контейнера).

В общем, я думаю, что том должен находиться в подкаталоге, например,

  volumes:
    - ./public:/var/www/html

Убедитесь, что правильнопользователь владеет ./public.Если вы запускаете контейнер, а каталог не существует, Docker создаст его для вас.В этом случае каталог принадлежит root, и вам необходимо изменить владельца вручную, как описано выше.


В качестве альтернативы, вы можете запустить веб-сервер как непривилегированный пользователь (user: 1000:1000), разрешивсервер прослушивает порт 8080 и меняет маршрутизацию на

 ports:
    - "8080:8080"
...