programing

기존 도커 컨테이너에서 명령을 실행하려면 어떻게 해야 합니까?

lastmoon 2023. 8. 30. 22:00
반응형

기존 도커 컨테이너에서 명령을 실행하려면 어떻게 해야 합니까?

사용하여 컨테이너를 만들었습니다.-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)가 백그라운드에서 실행되고 컨테이너가 즉시 중지되지 않습니다.

지정한 명령이 종료되면 컨테이너가 종료됩니다.다음 옵션을 사용하여 활성 상태를 유지합니다.

  • -iSTDIN이 부착되어 있지 않더라도 열어 둡니다.
  • -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 bashstdin ▁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

반응형