#c #docker #gcc
#c #docker #gcc
Вопрос:
Во время создания сторонней библиотеки ( libtorch
если это имеет значение) в контейнере docker я столкнулся с ошибкой отсутствия включаемого файла. Тот же процесс сборки работал нормально при запуске процесса сборки с хоста Ubuntu 16.04, но при запуске с хоста Ubuntu 18.04 файл отсутствовал.
После небольшого отслеживания я просто запускаю базовый контейнер от NVidia и ищу файл. Это результаты, которые я получаю:
Ubuntu 16.04 host
:
$ uname -a
Linux ub-carmel 4.15.0-123-generic #126~16.04.1-Ubuntu SMP Wed Oct 21 13:48:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ docker --version
Docker version 19.03.13, build 4484c46d9d
$ docker pull nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
11.1-cudnn8-devel-ubuntu18.04: Pulling from nvidia/cuda
Digest: sha256:c5bf5c984998cc18a3f3a741c2bd7187ed860dc6d993b6fb402d0effb9fe6579
Status: Image is up to date for nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
$ docker run -it nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
root@2ecc17248fab:/# ll /usr/lib/gcc/x86_64-linux-gnu/7/include | grep ia32
-rw-r--r-- 1 root root 7817 Dec 4 2019 ia32intrin.h
Ubuntu 18.04 host
:
$ uname -a
Linux ub-carmel-18-04 5.4.0-56-generic #62~18.04.1-Ubuntu SMP Tue Nov 24 10:07:50 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ docker --version
Docker version 19.03.14, build 5eb3275d40
$ docker pull nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
11.1-cudnn8-devel-ubuntu18.04: Pulling from nvidia/cuda
Digest: sha256:c5bf5c984998cc18a3f3a741c2bd7187ed860dc6d993b6fb402d0effb9fe6579
Status: Downloaded newer image for nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
$ docker run -it nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
root@89f771e82a51:/# ll /usr/lib/gcc/x86_64-linux-gnu/7/include | grep ia32
root@89f771e82a51:/#
Как вы можете видеть, дайджест изображений sha256 одинаков (и соответствует дайджесту из NGC от NVidia здесь)
Сначала я подумал, что, возможно, каким-то скрытым образом включения поступают с хоста, но ia32intrin.h
файл существует на обоих хостах
Что может вызвать такую проблему?
Редактировать
Добавлены docker --version
выходные данные для каждого хоста. Есть разница, но я сомневаюсь, что это должно вызывать такие проблемы
РЕДАКТИРОВАТЬ 2
Добавлен вывод для uname -a
РЕДАКТИРОВАТЬ 3
Вывод docker version
:
Ubuntu 16
:
$ docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:59 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:01:30 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Ubuntu 18
:
$ docker version
Client: Docker Engine - Community
Version: 19.03.14
API version: 1.40
Go version: go1.13.15
Git commit: 5eb3275d40
Built: Tue Dec 1 19:20:17 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.14
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 5eb3275d40
Built: Tue Dec 1 19:18:45 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.9
GitCommit: ea765aba0d05254012b0b9e595e995c09186427f
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Итак, я протестировал его на разных компьютерах Ubuntu (экземпляры EC2), и в этом случае для обоих 18.04 и 16.04 файл существует. похоже, это проблема на моей машине.
Любые мысли о том, что может вызвать это?
Комментарии:
1. Имеют ли хосты одинаковую архитектуру? Показать
uname -a
вывод.2. @BMitch, спасибо. Добавил его в сообщение
3. Выглядит так же, переключитесь на вывод
docker version
вместоdocker --version
. Последний показывает только версию клиента CLI и пропускает сам хост docker.4. @JaapVersteegh, оба дают одинаковый
i386
результат5. Полная очистка всего и принудительная повторная загрузка всех слоев решили проблему. Спасибо вам обоим за помощь
Ответ №1:
Лучше всего предположить, что извлеченные слои на хосте Ubuntu 18.04 каким-то образом повреждены. Основной вариант очистки — сбросить docker. Это приведет к удалению всех изображений, томов, контейнеров, журналов, сетей, всего, поэтому создайте резервную копию всего, что вы хотите сохранить, перед запуском этого:
sudo -s # these commands need root
systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker
exit # exit sudo