Создать и собрать Docker Dockerfile из скрипта - PullRequest
0 голосов
/ 19 октября 2018

У меня возникли некоторые трудности при попытке создать скрипт, который создает и создает файл Docker, который получает текущие uid и gid текущих пользователей и задает uid и gid vagrant пользователя внутри контейнера в соответствии с хостом.

output = "FROM %s\nUSER root\nRUN usermod --uid %s vagrant && groupmod --gid %s vagrant && chown -R vagrant:vagrant /home/vagrant\nUSER vagrant" % (build_image, uid, gid)
f = open("Dockerfile", "w")
f.write(output)
f.close

# Build the image using the created Dockerfile
build_command = "docker build -t %s . --pull" % args.name
print("\nRunning: " + build_command)
subprocess.call(['bash', '-c', build_command])

docker build -t test-image . --pull работает в командной строке, но при запуске сценария я получаю: «Ошибка ответа от демона: Dockerfile (Dockerfile) не может быть пустым» *

У кого-нибудь есть идеи, почему это может происходить

1 Ответ

0 голосов
/ 19 октября 2018

Вы на самом деле не звоните f.close;результатом этой строки является сама незапрошенная функция close.Лучший подход к обработке файлов в Python в целом заключается в использовании диспетчера контекста «с» синтаксисом:

with open("Dockerfile", "w") as f:
  f.write(output)

, и тогда файл будет закрыт для вас.

(Фактические записи несколькодорого, и поэтому Python, как и большинство других языков, будет фактически сохранять содержимое для записи в буфере в памяти до тех пор, пока файл не будет закрыт, явно сброшен или не будет записано больше определенного объема содержимого, поэтому фактически не вызываетсяf.close() вызывает проблему.)

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