docker-compose exec вызывает [Errno 2] Нет такого файла или каталога: 'docker-compose': 'docker-compose' в контейнере docker - PullRequest
0 голосов
/ 10 января 2019

Я использую docker compose для создания сети контейнеров, где один из контейнеров запрашивает другой для запуска процесса. Клиент также должен контролировать этот процесс в случае ошибок или когда он завершается. Мой подход заключается в использовании подпроцесса Python Popen следующим образом:

process = subprocess.Popen(cmd,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

, где cmd равно ['docker-compose', 'exec', 'service2', 'sh', '-c', 'cp sourcefile /destination && python run.py']

Но я получаю эту ошибку

[Errno 2] No such file or directory: 'docker-compose': 'docker-compose'

Я попытался выполнить ту же команду в режиме bash на клиентском контейнере и получил

bash: docker-compose: command not found. Я думал о том, чтобы сделать динд, но это действительно необходимо? Эта команда работает на моем хост-компьютере docker-compose run --rm service2 python apples.py shell. Как правильно подходить, мне нужно в любое время запросить код возврата процесса, выполняющегося в контейнере service2, из service1. Я объявил бридж-сеть. Спасибо

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я попробовал предложение от здесь добавлено

COPY --from=library/docker:latest /usr/local/bin/docker /usr/bin/docker COPY --from=docker/compose:1.23.2 /usr/local/bin/docker-compose /usr/bin/docker-compose в мой dockerfile и смог использовать оригинальную команду docker-compose. Все еще не уверен, что лучшая практика, но это сработало.

РЕДАКТИРОВАТЬ: добавлено к вышеупомянутому, я также установил переменную окружения в моем файле докера для хоста докера, как RUN export DOCKER_HOST="tcp://0.0.0.0:2375" сейчас docker-compose service2 exec -c 'cmd' работает с subprocess.Popen, созданным внутри контейнера service1.

0 голосов
/ 10 января 2019

В вашей команде используйте абсолютный путь к исполняемому файлу docker-compose на вашем компьютере.

...