Соответствие разрешений происходит только для числовых идентификаторов пользователей и групп. Если файл сокета находится в режиме 0660 и принадлежит идентификатору пользователя 0 и идентификатору группы 32, и вы вызываете его как пользователя с идентификатором пользователя 1000 и идентификаторами группы 1000 и 16, не имеет значения, если одно /etc/group
имя файла gid 32 как docker
, а другой называет gid 16 таким же; числовые значения отличаются, и вы не можете получить доступ к файлу. Кроме того, поскольку фактический числовой код группы Docker может различаться в разных системах, это не то, что вы можете вставить в Dockerfile.
Многие образы Docker просто запускаются от имени root; в противном случае они могут получить доступ к файлу сокета Docker, смонтированному на привязке, независимо от его разрешений.
Если вы работаете как пользователь без полномочий root, вы можете использовать опцию docker run --group-add
, чтобы добавить (числовой) gid эффективному пользователю; это не обязательно должно быть упомянуто в файле /etc/groups
. На хосте Linux вы можете запустить:
docker run --group-add $(getent group docker | cut -d: -f3) ...
Обычно вы не устанавливаете sudo
в Dockerfile (он плохо работает с неинтерактивными программами, вы обычно не делаете много в интерактивных оболочках из-за эфемерной природы контейнеров, и вы всегда может docker exec -u 0
получить оболочку root), хотя установка некоторого пользователя без полномочий root часто считается лучшей практикой. Вы можете уменьшить Dockerfile до
FROM node:8
RUN apt-get update
# Trying to use the host's `docker` binary may not work well
RUN apt-get install -y docker.io
# Install the single node tool you need
RUN npm install -g gulp
# Get your non-root user
RUN adduser myusername
# Normal Dockerfile bits
WORKDIR ...
COPY ...
RUN gulp
USER myusername
CMD ["npm", "run", "start"]
( Этот базовый образ Docker имеет пару из вещей , которые на самом деле не соответствуют Docker лучшие практики, и, кажется, не обновляются регулярно, я бы просто использовал стандартный node
образ в качестве основы и добавил бы один инструмент сборки, который вам нужен.)