-d
대화식이 아닌 컨테이너를 만들었습니다 .
docker run -d shykes/pybuilder bin/bash
컨테이너가 종료되었음을 알 수 있습니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c45e8cc5f0 shykes/pybuilder:latest "bin/bash" 41 minutes ago Exited (0) 2 seconds ago clever_bardeen
이제 기계에서 가끔 명령을 실행하고 종료하고 싶습니다. 응답을 받으려면
나는 기계를 시작하려고했습니다. 나는 첨부를 시도했다. run
컨테이너로 전화 할 수 있다고 생각 했지만 허용되지 않는 것 같습니다. 사용하는 start
것만으로도 빠르게 작동하는 것 같습니다.
종료 후 대화식 모드로 돌아가고 싶습니다.
나는 시도했다 :
docker attach d6c45e8cc5f0
그러나 나는 얻는다 :
2014/10/01 22:33:34 You cannot attach to a stopped container, start it first
그러나 시작하면 어쨌든 종료됩니다. 22를 잡아라. 나는 이길 수 없다.
답변
2014 년 10 월 Docker 팀은 docker exec
https://docs.docker.com/engine/reference/commandline/exec/ 명령을 도입했습니다 .
이제 실행중인 컨테이너에서 ID (또는 이름)를 알고있는 명령을 실행할 수 있습니다.
docker exec -it <container_id_or_name> echo "Hello from container!"
주의 exec
명령은 이미 실행중인 컨테이너에서 작동합니다. 컨테이너가 현재 중지 된 경우 먼저 다음 명령을 사용하여 컨테이너를 실행해야합니다.
docker run -it -d shykes/pybuilder /bin/bash
여기서 가장 중요한 것은 -d
옵션입니다 detached
. 이는 처음에 컨테이너 ( /bin/bash
)에 제공 한 명령이 백그라운드에서 실행되고 컨테이너가 즉시 중지 되지 않음을 의미 합니다 .
답변
지정한 명령 이 종료 되면 컨테이너가 종료 됩니다. 다음 옵션을 사용하여 그대로 유지하십시오.
-i
부착하지 않아도 STDIN을 열어 두십시오.-t
의사 TTY를 할당하십시오.
따라서 새로운 run
명령은 다음과 같습니다.
docker run -it -d shykes/pybuilder bin/bash
이미 실행중인 컨테이너에 연결하려는 경우 :
docker exec -it CONTAINER_ID /bin/bash
이 예에서는 /bin/bash
명령으로 사용됩니다.
답변
그래서 나는 그 대답이 위의 많은 오도 된 대답보다 간단하다고 생각합니다.
중지 된 기존 컨테이너를 시작하려면
docker start <container-name/ID>
실행중인 컨테이너를 중지하려면
docker stop <container-name/ID>
그런 다음 컨테이너의 대화식 쉘에 로그인
docker exec -it <container-name/ID> bash
기존 컨테이너를 시작하고 하나의 명령으로 첨부하려면
docker start -ai <container-name/ID>
종료시 컨테이너가 중지됩니다. 그러나 일반적으로 컨테이너를 시작하고 완료 한 후 연결 및 중지해야합니다.
답변
katrmr의 답변을 확장하려면 컨테이너가 중지되어 오류로 인해 시작할 수없는 경우 이미지로 가져와야 commit
합니다. 그런 다음 새 이미지에서 bash를 시작할 수 있습니다.
docker commit [CONTAINER_ID] temporary_image
docker run --entrypoint=bash -it temporary_image
답변
여기에있는 답변 중 일부는 멈추지 않고 실행중인 컨테이너와 관련이 있기 때문에 오해의 소지가 있습니다.
Sven Dowideit는 Docker 포럼에서 컨테이너가 프로세스에 바인딩되어 있다고 설명했으며 Docker는 적어도 내부 구조로 인해 중지 된 컨테이너의 프로세스를 변경할 수없는 것으로 보입니다 : https://github.com/docker/docker/issues / 1437 ). 따라서 기본적으로 유일한 옵션은 commit
이미지 에 대한 컨테이너 run
와 다른 명령을 사용하는 것입니다.
https://forums.docker.com/t/run-command-in-stopped-container/343을 참조 하십시오
( ENTRYPOINT
여전히 ” with arguments”접근 방식이 작동하지 않을 것이라고 생각합니다. 중지 된 컨테이너에 대한 인수)
답변
bash -c를 사용하여 명령을 실행해야했습니다.
docker exec -it CONTAINER_ID bash -c "mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql"
답변
컨테이너를 만들고 하나씩 명령을 보냅니다.
docker create --name=my_new_container -it ubuntu
docker start my_new_container
// ps -a says 'Up X seconds'
docker exec my_new_container /path/to/my/command
// ps -a still says 'Up X+Y seconds'
docker exec my_new_container /path/to/another/command