2016-09-20 3 views
2

Я использую API Docker-py для обработки и управления контейнерами Docker. В API функция put_archive ожидает, что поле data будет в байтах. Так, используя библиотеку tarfile у меня есть:Чтение tarfile в BytesIO

import tarfile 
import io 

container = client.create_container(image="myimage", command="/bin/bash") 
source = "~/.ssh/id_rsa.pub" 
tarfile = create_tar_file(path=source, name="keys.tar") 
# tarfile = "keys.tar" 
# How can I read the tar file was a BytesIO() object? 
data = io.BytesIO() 
client.put_archive(container=container, path="/tmp", data=data) 

В API говорит:

put_archive

Вставьте файл или папку в существующем контейнере с использованием архива смолы в качестве источника.

Params:

контейнер (ул): контейнер, в котором будет извлечен файл (ы) путь (ул): Путь внутри контейнера, где будет извлечен файл (ы). Должно существовать. данные (байты): данные tar для извлечения Возвраты (bool): Истина, если вызов преуспевает. docker.errors.APIError будет поднят, если произойдет ошибка.

Мой вопрос: Как я могу прочитать файл деготь как BytesIO(), поэтому он может быть передан в функцию put_archive()?

+0

@martineau вы могли бы сделать это в ответ? – cybertextron

ответ

4

Вы могли бы сделать это так (непроверенный, потому что у меня нет Docker-py установлен):

with open('keys.tar', 'rb') as fin: 
    data = io.BytesIO(fin.read()) 
Смежные вопросы