Intereting Posts
Есть ли какое-либо решение для выполнения двоичного файла в контейнере, который монтируется с хоста? почему контейнер докеров все еще может связываться с внешним, когда я закрываю iptables Bash с docker exec не спускаются, когда есть больше контента для показа Несколько докерных контейнеров (домены) с NGINX в качестве прокси Не удалось запустить службу в контейнере докера, с ошибкой: не удалось подключиться к D-Bus: нет подключения к диспетчеру службы Как редактировать код в контейнере Docker в разработке? Докер для окон: как получить доступ к контейнеру из машины dev (по имени ip / dns) Отсутствие пространства имен в той же версии фреймворка Доступен ли NCCL2 в контейнере докера? Принудительная установка пакета – без перезаписи Gemfile.lock Рельсовые леса с докере и владением файлами Неизвестный уровень запуска базового документа Docker Rabbitmq в кластере Кубернетес Настройка Docker – проблемы при запуске локального сетевого кода настройка dynomitedb от Docker-compose

Сценарий 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.