기존 도커 컨테이너에서 명령을 실행하려면 어떻게 해야 합니까?
사용하여 컨테이너를 만들었습니다.-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월, 도커 팀은 다음 명령을 도입했습니다. 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
예제에서는 이예서는에는▁in/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
인수 포함" 접근 방식도 작동하지 않습니다. 왜냐하면 인수를 중지된 컨테이너로 변경할 수 없기 때문입니다.)
.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
셸 스크립트를 실행하려면 bash로 실행해야 합니다.
docker exec -it containerid bash -c /path/to/your/script.sh
위의 CDR LDN 답변과 여기서 찾은 답변을 사용하여 작성한 답변입니다.
Arch를 설치합니다.git
사하여해에너컨이테를 하여 그 에.pacman
선택사항:
sudo docker run -it -d archlinux /bin/bash
sudo docker ps -l
sudo docker exec -it [container_ID] script /dev/null -c "pacman -S git --noconfirm"
그게 다야.
저는 상단 답변이 약간 오해의 소지가 있다는 점에 주목하고 싶습니다.
을 실행할 때의 docker run
즉, 매번 새 컨테이너가 생성됩니다.그러나 기존 컨테이너를 다시 방문하거나 새 컨테이너로 공간을 차지하지 않는 경우가 있습니다.
(으)clever_bardeen
생성된 컨테이너의 이름입니다...)
OP의 경우 다음 명령을 실행하여 도커 이미지가 먼저 실행되고 있는지 확인합니다.
docker start clever_bardeen
그런 다음 다음 명령을 사용하여 도커 컨테이너를 실행합니다.
docker exec -it clever_bardeen /bin/bash
에 명령 파이프 docker exec bash
stdin ▁st
를 .-t
작동하기 위해:
echo 'touch myfile' | docker exec -i CONTAINER_NAME bash
이렇게 하면 CLI 옵션을 사용하는 것보다 편리할 수 있습니다.
테스트 대상:
docker run --name ub16 -it ubuntu:16.04 bash
그리고 다른 껍질 위에:
echo 'touch myfile' | docker exec -i ub16 bash
그리고 첫 번째 껍질에서:
ls -l myfile
Docker 1.13.1, Ubuntu 16.04 호스트에서 테스트되었습니다.
나는 주로 이것을 사용합니다.
docker exec -it my-container-name bash
실행 중인 컨테이너와 지속적으로 상호 작용합니다.
합니다./bin/sh -c
, 니다입./bin/bash
모드에서 됩니다.-d
) 이셸을 하려면 이컨이에서대셸화실사다용다합니음을면려를 -it
에 -d
일반적으로 다른 프로세스를 실행하는 컨테이너에서 임의 명령을 실행하려면 다음을 시도할 수 있습니다.nsenter
또는nsinit
자세한 내용은 https://blog.codecentric.de/en/2014/07/enter-docker-container/ 을 참조하십시오.
유감스럽게도 이를 무시하는 것은 불가능합니다.ENTRYPOINT
가 와논여인 경우.docker run --entrypoint
이 목표를 달성하기 위해.
참고: --entrypoint를 사용하여 ENTRINEPOINT 설정을 재정의할 수 있지만, 이 경우 이진을 exec으로만 설정할 수 있습니다(nosh -c는 사용되지 않습니다).
Mac의 경우:
$ docker exec -it <container-name> sh
root 사용자로 연결하려는 경우:
$ docker exec -u 0 -it <container-name> sh
간단한 답변: 시작과 부착을 동시에 수행합니다.이 경우 당신은 당신이 요청한 것을 정확히 하고 있습니다.
docker start <CONTAINER_ID/CONTAINER_NAME> && docker attach <CONTAINER_ID/CONTAINER_NAME>
바꿔주세요<CONTAINER_ID/CONTAINER_NAME>
윈도우 컨테이너를 실행하고 있는데 도커 컨테이너 안에서 생성 및 복사된 파일과 폴더를 찾아야 합니다.
이를 위해 다음 도커 진입점 명령을 사용하여 컨테이너 내부에서 명령 프롬프트를 실행하거나 컨테이너에 연결했습니다.
ENTRYPOINT ["C:\\Windows\\System32\\cmd.exe", "-D", "FOREGROUND"]
그것은 컨테이너에 연결하는 명령 프롬프트와 컨테이너를 활성화하는 데 도움이 되었습니다.:)
# docker exec -d container_id command
예:
# docker exec -d xcdefrdtt service jira stop
가장 최근에 종료한 컨테이너를 다시 시작하고 액세스하는 빠른 방법:
docker start -a -i `docker ps -q -l`
비슷한 문제를 해결한 쉬운 해결책:
docker run --interactive --tty <name_of_image>
언급URL : https://stackoverflow.com/questions/26153686/how-do-i-run-a-command-on-an-already-existing-docker-container
'programing' 카테고리의 다른 글
마지막 항목에서 두 번 실행 중인 Oracle 커서 (0) | 2023.08.30 |
---|---|
Node.js가 만든 웹 사이트를 Github Pages에 게시하는 방법은 무엇입니까? (0) | 2023.08.30 |
활동 제목이 아닌 시작 프로그램에 대해 다른 레이블을 설정하는 방법은 무엇입니까? (0) | 2023.08.30 |
Enable-PSRemoting 후 원격 파워셸 세션을 생성할 수 없음 (0) | 2023.08.30 |
명령줄에서 특정 인증서 저장소로 pfx 파일 가져오기 (0) | 2023.08.30 |