programing

Docker Composes를 사용한 대화형 셸

lovejava 2023. 9. 16. 08:20

Docker Composes를 사용한 대화형 셸

도커 컴포지트만 사용하여 컨테이너에서 대화형 셸을 시작할 수 있는 방법이 있습니까?이런 거 시도해봤어요, 내 도커작곡으로.yml:

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

도커 컴포지트 업을 사용하여 이 컨테이너를 시작하면 즉시 꺼집니다.추가할 수 있는 플래그가 있습니까?entrypoint명령 또는 추가 옵션으로myapp, 상호작용적인 포탄을 시작할 수 있습니까?

이를 달성하기 위한 네이티브 도커 명령 옵션이 있다는 것을 알고 있습니다. 도커 컴포지트만 사용해도 가능한지 궁금합니다.

도커-컴포지트.yml에 다음 행을 포함해야 합니다.

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

첫번째는 다음과 같습니다.-i인에docker run그리고 두번째는-t.

도커 컴포지트와 상호작용 셸을 얻는 표준 방법은 다음과 같습니다.

docker-compose run --rm myapp

(서비스명 포함)myapp당신의 예에서 따온 것입니다.일반: 도커 작성 파일의 기존 서비스 이름이어야 합니다.myapp그냥 당신이 선택한 명령이 아닙니다예:bash대신에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.9"
services:
  web:
    build: .
    ports:
      - "8000: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 exec service_name sh

아니면

docker-compose exec service_name bash

아니면 다음과 같이 한 줄로 달리면 됩니다.

docker-compose exec service_name php -v

이는 컨테이너를 이미 설치하고 실행한 후의 일입니다.

service_name당신의 에 정의되어 있습니다.docker-compose.yml파일

도커 컴포지트를 사용하면 가장 쉬운 방법은docker ps -a(컨테이너를 시작한 후)docker-compose up)와 대화형 셸을 갖고 싶은 컨테이너의 ID를 가져옵니다(xyz123이라고 합시다).

그럼 실행하는 것은 간단한 문제입니다.docker exec -ti xyz123 /bin/bash

그리고 상호작용하는 껍질인 voila.

이 질문은 실행이 끝난 후 컨테이너를 실행하면 즉시 종료되고 -it로 수정할 때 문제가 발생하기 때문에 매우 흥미롭습니다.

docker run -it -p 3000:3000 -v /app/node_modules -v $(pwd):/app <your_container_id>

그리고 도커로 자동화해야 할 때는 다음과 같이 구성합니다.

version: '3'
services:
    frontend:
        stdin_open: true
        tty: true
        build: 
            context: .
            dockerfile: Dockerfile.dev
        ports: 
            - "3000:3000"
        volumes: 
            - /app/node_modules
            - .:/app

이것이 트릭을 만듭니다: stdin_open: true, tty: true

create-react-app으로 생성된 프로젝트입니다.

Dockerfile.dev는 다음과 같이 보입니다.

FROM node:alpine

WORKDIR '/app'

COPY package.json .
RUN npm install

COPY . . 

CMD ["npm", "run", "start"]

이 예를 통해 프론트 엔드를 도커 컨테이너로 실행하는 데 도움이 되기를 바랍니다.

나는 더좋아요

docker-compose exec my_container_name bash

ymld라고 합니다.docker-compose.yml할a으로 출시할 수 .$ docker-compose up할 수 (. 의 과 될 은 될 ).yml했습니다라는 했습니다.myservice):

$ docker-compose exec myservice sh

을 하는 하는 을 사용하는 경우yml 이름:름:docker-compose-mycompose.yml를 하여 해야 해야를 사용하여 발사해야 합니다.$ docker-compose -f docker-compose-mycompose.yml up하려면 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .yml파일 또한 다음과 같습니다.

$ docker-compose -f docker-compose-mycompose.yml exec myservice sh

이 오래된 질문에 더해서, 저번에 사건만 겪었었거든요.sh와 bash의 차이.그래서 어떤 배시는 효과가 없고 오직 그녀만 효과가 있기 때문에 일어날 수 있습니다.

따라서 다음을 수행할 수 있습니다.docker-compose exec CONTAINER_NAME sh

의 경우: 의 의 docker-compose exec CONTAINER_NAME bash

사용하다.

시간 되시면.sh와 bash의 차이점은 여기에 잘 설명되어 있습니다. https://www.baeldung.com/linux/sh-vs-bash

할수있습니다docker-compose exec SERVICE_NAME sh지휘 라인에. 그.SERVICE_NAME당신의 에 정의되어 있습니다.docker-compose.yml를 들어 ,

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

SERVICE_NAME"동물원 관리자"일 것입니다.

문서에 따르면 -> https://docs.docker.com/compose/reference/run/

이거 쓰셔도 돼요.docker-compose run --rm app bash

[app]은(는) docker-docker.yml의 서비스 이름입니다.

셸을 수 것을 했습니다. 비록 을 을 했습니다 에서 했습니다 을 에서 docker-compose:

  • docker-compose up
  • Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ Δ Δ Δ Δ,docker ps -a
  • 대화형 배시 셸을 열 컨테이너 이름을 선택합니다.
  • 를 합니다.docker exec -it containerName bash

이제 터미널이 컨테이너의 bash shell에 있어야 하고 컨테이너의 내용과 상호 작용할 수 있습니다.

도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/36249744/interactive-shell-using-docker-compose