Я столкнулся со странной проблемой, и я не знаю, как поступить.
У меня есть докер 18.09.2, сборка 6247962 на виртуальной машине VMware ESXi 6.5 под управлением Ubuntu 18.04. У меня есть докер 19.03.3, соберите a872fc2f86 на виртуальной машине Azure под управлением Ubuntu 18.04. У меня есть следующий небольшой тестовый скрипт, который я запускаю на обоих хостах и в разных док-контейнерах:
#!/usr/bin/python3
import fcntl
import struct
image_path = 'foo.img'
f_obj = open(image_path, 'rb')
binary_data = fcntl.ioctl(f_obj, 2, struct.pack('I', 0))
bsize = struct.unpack('I', binary_data)[0]
print('bsize={0}'.format(bsize))
exit(0)
Я запускаю «ps -ef >foo.img», чтобы получить файл foo.img. Вывод вышеуказанного скрипта на обеих виртуальных машинах: bsize=4096.
У меня есть следующий Dockerfile на обеих виртуальных машинах:
FROM ubuntu:19.04
RUN apt-get update && \
apt-get install -y \
python \
python3 \
vim
WORKDIR /root
COPY testfcntl01.py foo.img ./
RUN chmod 755 testfcntl01.py
Если я создам образ Docker с указанным выше файлом Dockerfile на виртуальной машине, на которой работает docker 18.09.2, это даст мне те же результаты, что и хост.
Если я создам образ докера с указанным выше файлом Dockerfile на виртуальной машине, на которой работает докер 19.03.3, это выдаст мне следующую ошибку:
root@d317404714a6:~# ./testfcntl01.py
Traceback (most recent call last):
File "./testfcntl01.py", line 9, in <module>
binary_data = fcntl.ioctl(f_obj, 2, struct.pack('I', 0))
OSError: [Errno 22] Invalid argument
Я сравнил структуру каталогов докера, файл daemon.json, журналы, «информацию о докере» между хостами. Они кажутся идентичными. Я пробовал с Ubuntu: 18.04, а также с Ubuntu: 19.04. Я пробовал как с python2, так и с python3. Те же результаты.
Я не знаю, почему fcntl дает сбой только в контейнере докеров на виртуальной машине Azure, на которой работает докер 19.03.3. Что-то изменилось в докере между 18 и 19, что могло вызвать это? Есть ли какое-то изменение конфигурации, которое мне нужно сделать, чтобы заставить это работать? Что-то еще мне не хватает?
Любая помощь будет принята с благодарностью.
Спасибо
Льюис Мюленкамп
ОБНОВЛЕНИЕ01:
Я выполнял шаги здесь, чтобы подготовить собственный виртуальный жесткий диск Ubuntu 18.04 для использования в Azure. Я начал с обычной установки Ubuntu Server 18.04 с использованием ubuntu-18.04.3-live-server-amd.iso, который я только что скачал с веб-сайта Ubuntu. Приведенный ниже тест отлично работает на только что установленной виртуальной машине. я заканчиваю шаг
sudo apt-get install linux-generic-hwe-18.04 linux-cloud-tools-generic-hwe-18.04
и тогда мой тест терпит неудачу. Итак, я считаю, что есть некоторые проблемы с этими пакетами поддержки оборудования.