Запуск исполняемого файла внутри Docker-контейнера из другого контейнера - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь запустить исполняемый файл из другого контейнера докера, когда он уже находится внутри контейнера докера. Это возможно?

version: '3.7'
services:
  py:
    build: .
    tty: true
    networks:
      - dataload
    volumes:
      - './src:/app'
      - '~/.ssh:/ssh'

  winexe:
    build: 
      context: ./winexe
      dockerfile: Dockerfile
    networks:
      - dataload
    ports: 
      - '8001:8001'
    volumes:
      - '~/path/to/winexe:/usr/bin/winexe'
      - '~/.ssh:/ssh'
    depends_on:
      - py

networks:
  dataload:
    driver: bridge

Я пытаюсь получить доступ к Winexe из 'py'

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

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

К счастью, docker-compose дает вам URL, который вы можете использовать для связи междуконтейнеры.В случае вашего файла docker-compose вы можете получить доступ к контейнеру winexe из вашего контейнера py следующим образом:

http://winexe:8001 // or ws://winexe:8001 or postgres://winexe:8001 (you get the idea)

(здесь я использовал порт 8001, потому что это порт, который вы сделали доступным дляwinexe - я понятия не имею, можно ли его использовать для этого)на сервер)

Узнайте больше здесь:

https://docs.docker.com/compose/networking/

0 голосов
/ 09 июля 2019

Предполагая, что вы имеете в виду запуск другого контейнера Docker изнутри контейнера, это можно сделать несколькими способами:

Установите команду docker внутри вашего контейнера и:

  1. Контактэкземпляр Docker хостинга через TCP / IP.Для этого вам нужно будет подключить хост Docker к сети, что по умолчанию не рекомендуется и не рекомендуется.
  2. Сопоставьте сокет докера (обычно /var/run/docker.sock) с вашим контейнером, используя том,Это позволит команде docker внутри контейнера напрямую связываться с экземпляром хоста.

Имейте в виду, что это, по сути, дает контейнеру root уровень доступа к хосту!Я уверен, что есть много других способов сделать то же самое, но наиболее часто я вижу подход № 2.

Если вы хотите запустить другой исполняемый файл в другом - уже запущенном - контейнере Docker, вы можетеСделайте это также вышеописанным способом, используя docker exec или запустите какой-нибудь демон во втором контейнере, который принимает команды и запускает требуемую команду для вас.

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