Docker build и docker -compose build с отображением пространства имен пользователя - PullRequest
0 голосов
/ 03 марта 2020

Я включил сопоставление пространства имен пользователя в docker и построение изображения с использованием docker сборка работает, но когда я использую docker -заменить для изображения, оно завершается с сообщением ниже. В чем может быть причина?

db@vagrant:~/docker$ docker-compose up --build

Building db
Step 1/3 : FROM alpine:latest
 ---> e7d92cdc71fe
Step 2/3 : WORKDIR /app
 ---> Using cache
 ---> 1491149423a1
Step 3/3 : COPY 1.txt .
ERROR: Service 'db' failed to build: failed to copy files: failed to copy file: Container ID 65536 cannot be mapped to a host ID

Мой идентификатор пользователя генерируется некоторыми сценариями установки, в результате чего UID имеет значение больше 65535.

db@vagrant:~/docker$ id
uid=65536(db) gid=1000(db) groups=1000(db),27(sudo),998(docker)

Docker configuration for namespace mapping

db@vagrant:~/docker$ cat /etc/docker/daemon.json
{
  "userns-remap": "db"
}

db@vagrant:~/docker$ cat /etc/subuid /etc/subgid
db:100000:65536
db:100000:65536

Содержимое Dockerfile (1. txt - пустой файл)

db@vagrant:~/docker$ cat Dockerfile
FROM alpine:latest
WORKDIR /app
COPY 1.txt .

docker -compose.yml содержимое файла

db@vagrant:~/docker$ cat docker-compose.yml
version: "2"
services:
   db:
     build:
       context: .
       dockerfile: Dockerfile
     image: sirishkumar/test

Вывод docker команды построения

db@vagrant:~/docker$ docker build -t sirishkumar/test .
Sending build context to Docker daemon  3.584kB
Step 1/3 : FROM alpine:latest
latest: Pulling from library/alpine
c9b1b535fdd9: Pull complete
Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
Status: Downloaded newer image for alpine:latest
 ---> e7d92cdc71fe
Step 2/3 : WORKDIR /app
 ---> Running in 55f092b96268
Removing intermediate container 55f092b96268
 ---> 8af079e6a478
Step 3/3 : COPY 1.txt .
 ---> b3c14a691102
Successfully built b3c14a691102
Successfully tagged sirishkumar/test:latest

Вывод docker -композит

db@vagrant:~/docker$ docker-compose up --build
Creating network "docker_default" with the default driver
Building db
Step 1/3 : FROM alpine:latest
latest: Pulling from library/alpine
c9b1b535fdd9: Pull complete
Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
Status: Downloaded newer image for alpine:latest
 ---> e7d92cdc71fe
Step 2/3 : WORKDIR /app
 ---> Running in fe39955aed1a
Removing intermediate container fe39955aed1a
 ---> fb23b8888f4a
Step 3/3 : COPY 1.txt .
ERROR: Service 'db' failed to build: failed to copy files: failed to copy file: Container ID 65536 cannot be mapped to a host ID

1 Ответ

1 голос
/ 03 марта 2020

У вас есть диапазон 65 536 идентификаторов пользователей для сопоставления с вашим docker пространством имен пользователей:

db@vagrant:~/docker$ cat /etc/subuid /etc/subgid
db:100000:65536
db:100000:65536

А затем вы говорите docker, чтобы скопировать файл в контейнер, принадлежащий идентификатору вне этого диапазона (идентификатор пользователя начинается с 0):

db@vagrant:~/docker$ id
uid=65536(db) gid=1000(db) groups=1000(db),27(sudo),998(docker)

Вам необходимо установить свой идентификатор пользователя на хосте так, чтобы он находился в пределах диапазона идентификатора пользователя хоста (меньше 65536).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...