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
yml
d라고 합니다.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
'programing' 카테고리의 다른 글
최대값을 기준으로 테이블 결합 (0) | 2023.09.16 |
---|---|
행의 ID로 다른 테이블에 연결된 행이 2개 이상인 이름을 가져오는 방법 (0) | 2023.09.16 |
행 자체의 수량 필드를 기준으로 동일한 행을 여러 개 반환하려면 어떻게 해야 합니까? (0) | 2023.09.16 |
What Runtime예외적으로 Spring Crud Repository가 던질 수 있습니까? (0) | 2023.09.11 |
커서 드래그로 텍스트/요소 선택을 방지하려면 어떻게 해야 합니까? (0) | 2023.09.11 |