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
첫 번째는 -i
in에 해당하고 두 번째는에 해당 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
“사육사”일 것이다.