Intereting Posts
потерянное соединение с сервером mysql во время запроса примерно через 1000 секунд Конфигурация Grafana + InfluxDB Как долго я должен ждать, когда я запустил «docker-compose up»? Что делать, чтобы повторить попытку? Запуск виртуального бокса внутри контейнера докеров на macOS Прикрепите stdin контейнера докера через websocket Можно ли назначить статический публичный ip для контейнера Docker? Запуск сценария Lua в Docker Экспериментальные функции DockerToolbox Использование петлевых устройств в докере без флага – привилегированный Докер: подключение к контейнеру (без раскрытия портов) настройка системных переменных в MySQL, выполняемых как контейнер докеров Не удалось создать отчет об испытаниях транспортира в контейнере докера Как я могу найти, какие контейнеры (контейнеры) установили определенный том? Можете ли вы эффективно изменить контейнер Docker более низкого уровня, не перестраивая все приложения, которые полагаются на него? Открытие порта из контейнера-докера на AWS в остальной мир

Сценарий Python для запуска докеры

Поток скрипта python:

  • Я хочу запустить образ docker из сценария python.
  • После запуска изображения докеров мне нужно выполнить сценарий оболочки, который создает файл tar внутри контейнера докеров.
  • Мне нужно скопировать этот файл tar на хост-машину из контейнера докеров.
  • а затем скрипт python должен продолжить работу с некоторыми материалами, которые будут исполняться на главной машине.

Используя модуль docker-py, я смог сделать следующее:

pip install docker-py docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:22:43 2016 OS/Arch: linux/amd64 Server: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:22:43 2016 OS/Arch: linux/amd64 >>> import docker >>> c = docker.Client(base_url='unix://var/run/docker.sock',version='1.12',timeout=10) >>> c.images() [{u'Created': 1476217543, u'Labels': {}, u'VirtualSize': 5712315133, u'ParentId': u'sha256:1ba2be8d70b6ede3b68b1af50759e674345236dd952225fcbfbcc1781f370252', u'RepoTags': [u'ubuntu14.04_64:latest'], u'RepoDigests': None, u'Id': u'sha256:1c8ced0fb34d776adafaed938d41a69e3bab87466beaa8752d49bde0d81230c5', u'Size': 5712315133}] >>> ctr = c.create_container('ubuntu14.04_64:latest') >>> c.start(ctr) docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d685766385e7 ubuntu14.04_64:latest "bash" 16 hours ago Up 16 hours focused_fermi docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu14.04_64 latest 1c8ced0fb34d 21 hours ago 5.712 GB 

Я вижу изображение докеры и контейнер, запущенные на хосте, но теперь, если я хочу запустить сценарий оболочки внутри контейнера докера, как я могу это сделать? после этого мне нужно скопировать tar из контейнера в хост. Может ли кто-нибудь предложить, как это сделать?

Если вы хотите запустить скрипт в контейнере, вы должны создать Dockerfile содержащий этот скрипт. Пример может выглядеть примерно так:

 FROM ubuntu14.04_64:latest COPY ./script.sh /code/script.sh CMD /code/script.sh -o /target/output.tar.gz 

Тогда ваш скрипт python будет выглядеть примерно так:

 #!/usr/bin/env python import docker c = docker.from_env() c.build('.', image_name) ctr = c.create_container(image_name, volumes='./target:/target') c.start(ctr) # the tarball is now at ./target/output.tar.gz, copy it where you want it 

Это, вероятно, последовательность команд, которые вы хотите (заимствование из этого ответа ):

 docker create --name tmp -it ubuntu14.04_64:latest docker start tmp docker exec tmp tar czvf tmp.tgz etc/os-release docker stop tmp docker cp tmp:tmp.tgz tmp.tgz docker rm tmp 

Просмотрите эту документацию для эквивалентных команд с помощью docker-py.