Я создаю программу, которая автоматически создает файлы Dockerfile и загружает полученный образ в корзину S3:
chmod 777 docker_images && sudo docker build -t ${projectID} -o type=tar,dest=docker_images/${projectID}.tar ./projects/${projectID}
Тогда я делаю:
const params = {
Bucket: "deploystorage",
Key: `images/${projectID}.tar`,
Body: imageStream
};
s3.upload(params)
Весь этот код работает.
Наконец, я вхожу в экземпляр (ssh), устанавливаю Docker, а затем использую следующую команду для загрузки это:
wget -O $1 http://XX.XX.XX.XX/image/$1?token=$2
$1 — имя изображения, $2 — токен, сгенерированный при создании изображения. Предположим, что это правильно.
Путь — это запрос на получение данных к имеющемуся у меня серверу, который проверяет, соответствует ли токен изображению, и если да, отправляет файл из корзины S3.
Затем я запускаю следующие команды:
sudo docker load -i $1
sudo docker run -d $1
И снова $1 — это имя изображения. (В данном случае путь к изображению считается правильным)
Проблема...
Все работает отлично, пока я не попробуйте загрузить изображение:
sudo docker load -i test1.tar
open /var/snap/docker/common/var-lib-docker/tmp/docker-import-XXXXXXXXX/boot/json: no such file or directory
Часть XXXXXXXXX меняется при каждом запуске
Что я Пробовал
- Переименовал файл с test1 на test1.tar (оба не сработали)
- Я также попробовал импортировать образы Docker, и это работает:
sha256:e42e55791f3e8c98cf679197c75c1611d853f798cb13b58809198894c7ec5868
Пока я не попытаюсь запустить образ:
~/Deploy$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
e42e55791f3e 7 seconds ago 185MB
~/Deploy$ sudo docker run -d e42e55791f3e
docker: Error response from daemon: No command specified.
See 'docker run --help'.
То же самое происходит с docker-контейнером create e42e55791f3e
Я немного покопался на форумах с людьми, у которых были подобные ошибки, но ничего подходит для моего варианта использования.
- Проверил контрольные суммы md5 файла до и после загрузки в s3, обе совпали
# on the download side (after s3)
> md5sum test1
2dc24866ce25bc1470a153ad745435cf test1
# on the upload side (before s3)
> md5sum docker_images/test1.tar
2dc24866ce25bc1470a153ad745435cf docker_images/test1.tar - переустановил докер, все равно не работает, переустановил, но со снапом, все равно не работает
- chmod 777 на изображении все равно не сработало
- Установка из предварительно загруженной версии также вызывает ту же ошибку. Это заставляет меня думать, что это не имеет ничего общего с s3 и что-то не так с моей командой сборки. Я не уверен.
Версия Docker:
~/Deploy$ docker -v
Docker version 24.0.5, build ced0996
Версия для Ubuntu:ubuntu-jammy-22.04 (running on AMD64)
- Docker установлен с помощью Snap
Я запустил это через ChatGPT, он посоветовал мне проверить разрешения временной папки:
~/Deploy$ sudo stat /var/snap/docker/common/v
ar-lib-docker/tmp/
File: /var/snap/docker/common/var-lib-docker/tmp/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: ca01h/51713d Inode: 129831 Links: 2
Access: (0700/drwx------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-04-09 03:59:17.744710917 +0000
Modify: 2024-04-09 03:45:27.335506040 +0000
Change: 2024-04-09 03:45:27.335506040 +0000
Birth: 2024-04-09 02:50:28.020293941 +0000
Интересно отметить, что мне не удалось читать без sudo:
~/Deploy$ stat /var/snap/docker/common/var-li
b-docker/tmp/
stat: cannot statx '/var/snap/docker/common/var-lib-docker/tmp/': Permission denied
Подробнее здесь: https://stackoverflow.com/questions/782 ... ed-from-s3