[shell] Docker Compose를 사용하는 대화식 쉘

Docker Compose 만 사용하여 컨테이너에서 대화식 쉘을 시작하는 방법이 있습니까? 내 docker-compose.yml에서 이와 같은 것을 시도했습니다.

myapp:
  image: alpine:latest
  entrypoint: /bin/sh

docker-compose up을 사용 하여이 컨테이너를 시작하면 즉시 종료됩니다. 대화식 쉘로 시작하기 위해 진입 점 명령에 추가하거나 myapp에 대한 추가 옵션으로 추가 할 수있는 플래그가 있습니까?

이 작업을 수행하는 기본 docker 명령 옵션이 있다는 것을 알고 Docker Compose 만 사용할 수 있는지 궁금합니다.



답변

docker-compose.yml에 다음 줄을 포함해야합니다.

version: "3"
services:
  app:
    image: app:1.2.3
    stdin_open: true # docker run -i
    tty: true        # docker run -t

첫 번째는 -iin에 해당하고 두 번째는에 해당 docker run합니다 -t.


답변

docker-compose로 대화 형 셸을 얻는 정식 방법은 다음을 사용하는 것입니다. docker-compose run --rm myapp

당신은 설정할 수 있습니다 stdin_open: true, tty: true그러나 그것은 실제로 당신과 함께 적절한 쉘을 제공하지 않습니다, up로그는 모든 컨테이너에서 스트리밍되기 때문에.

당신은 또한 사용할 수 있습니다

docker exec -ti <container name> /bin/bash

실행중인 컨테이너에 쉘을 가져옵니다.


답변

공식 시작 예제 ( https://docs.docker.com/compose/gettingstarted/ )에서 다음과 같이 docker-compose.yml:

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

로 시작한 후에는 다음 docker-compose up을 사용하여 redis컨테이너 또는 컨테이너에 쉽게 껍질을 벗길 수 있습니다 web.

docker-compose exec redis sh
docker-compose exec web sh 


답변

docker-compose run myapp sh 거래를해야합니다.

up/ 와 약간의 혼동이 run있지만 docker-compose run문서에는 다음과 같은 훌륭한 설명이 있습니다. https://docs.docker.com/compose/reference/run


답변

docker-compose를 사용 하여이 작업을 수행하는 가장 쉬운 방법은 docker ps -a(로 컨테이너를 시작한 후 docker-compose up)하고 대화 형 셸을 사용하려는 컨테이너의 ID를 얻는 것입니다 (xyz123이라고 함).

그런 다음 실행하는 것이 간단합니다.
docker exec -ti xyz123 /bin/bash

그리고 대화식 쉘인 voila.


답변

미래의 누군가가 여기에서 방황하면 :

docker-compose exec container_name sh

또는

docker-compose exec container_name bash

또는 당신은 같은 한 줄을 실행할 수 있습니다

docker-compose exec container_name php -v

이미 컨테이너를 가동 한 후에


답변

docker-compose exec SERVICE_NAME sh명령 행에서 수행 할 수 있습니다 . 은 SERVICE_NAME에 정의되어 있습니다 docker-compose.yml. 예를 들어

services:
    zookeeper:
        image: wurstmeister/zookeeper
        ports:
          - "2181:2181"

SERVICE_NAME“사육사”일 것이다.