Вы не можете заблокировать файл passwd
, потому что вы не запускаете команду useradd
от имени пользователя root.Изображение cirrusci/flutter
по умолчанию работает как пользователь cirrus
:
$ docker run -it cirrusci/flutter id
uid=1000(cirrus) gid=999(cirrus) groups=999(cirrus),27(sudo)
. Чтобы изменить /etc/passwd
, вам нужно быть root
.Вы можете запустить команду от имени пользователя root в существующем контейнере, используя параметр -u
для docker exec
.Сравните это:
$ docker exec flutter useradd testuser
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
$
С этим:
$ docker exec -u root flutter useradd testuser
$
В данном конкретном случае выглядит так, как будто пользователь cirrus
может запустить sudo
, поэтому вы также можетевыполнить то же самое, как это:
$ docker exec flutter sudo useradd testuser
$