Как преобразовать команду docker run -it bash в docker-compose? - PullRequest
0 голосов
/ 12 февраля 2019

С учетом следующей команды:

docker run -dit -p 9080:9080 -p 9443:9443 -p 2809:2809 -p 9043:9043 --name container_name --net=host myimage:latest bash

Как преобразовать его в эквивалентный файл docker-compose.yml?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы не можете напрямую.Docker Compose запустит некоторое количество контейнеров, которые, как ожидается, будут работать более или менее автономно, и нет способа начать вводить команды в один из них.(Что бы вы сделали, если бы у вас было несколько контейнеров, которые вы хотели запустить и которые просто пытались запустить интерактивные bash сеансы?)

Лучшим вариантом было бы настроить образ Docker таким образом, чтобы он по умолчаниюCMD запустил фактическую команду, которую вы пытались запустить.

FROM some_base_image:x.y
COPY ...
CMD myapp.sh

Тогда вы сможете запустить

docker run -d \
    -p 9080:9080 \
    -p 9443:9443 \
    -p 2809:2809 \
    -p 9043:9043 \
    --name container_name \
    myimage:latest

, и ваше приложение должно запуститься самостоятельно, успешно, безвмешательство пользователя.Это то, что вы можете перевести непосредственно в синтаксис Docker Compose, и оно будет работать как положено.

0 голосов
/ 12 февраля 2019

В docker-compose флаги -it отражаются следующим образом:

tty: true
stdin_open: true

Эквивалентно docker run --net=host это:

services:
  web:
    ...
    networks:
      hostnet: {}

networks:
  hostnet:
    external: true
    name: host

Итак, ваш окончательный docker-compose долженвыглядит следующим образом:

version: '3'
services:
  my_name:
    image: myimage:latest
    container_name: my_name
    ports:
     - "9080:9080"
     - "9443:9443"
     - "2809:2809"
     - "9043:9043"
    command: bash
    tty: true
    stdin_open: true
    networks:
      hostnet: {}

networks:
  hostnet:
    external: true
    name: host

Ссылка на версию 3 составного файла

Последнее, но не менее важное, если вы хотите запустить его в отдельном режиме, просто добавьте флаг -dдля команды docker-compose:

docker-compose up -d
...