새 TTY로 이미 실행 중인 도커 컨테이너에 입력하는 방법
나는 Apache 서비스를 실행하는 컨테이너를 포그라운드로 가지고 있습니다.저는 다른 셸에서 컨테이너에 접근하여 그 안을 "주변"하고 파일을 검토할 수 있기를 원합니다.현재 컨테이너에 첨부하면 아파치 데몬을 보고 있으면 명령어를 실행할 수 없습니다.
달리는 컨테이너에 다른 tty를 부착하는 것이 가능합니까?혹시 도커가 LXC 컨테이너를 그냥 감싸고 있다는 점을 이용할 수 있을까요?다를 .sudo lxc-console -n [container-id] -t [1-4]
하지만 tty 하나만 사용할 수 있게 되었고 그것이 아파치 데몬을 실행하고 있는 것으로 보입니다.혹시 빌드 중에 여러 개의 lxc 콘솔을 활성화하는 방법이 있을까요?
가능하다면 opensh 서비스로 컨테이너를 구성하고 제작하고 싶지 않습니다.
도커 1.3에서는 새로운 명령이 있습니다.이를 통해 실행 중인 컨테이너를 입력할 수 있습니다.
docker exec -it [container-id] bash
참고: 다음을 가정합니다.bash
가 컨테이너에 설치됩니다.달려도 좋습니다sh
또는 컨테이너에 설치된 대화형 셸.
SSH를 사용하지 않고 용기에 들어가려면 제롬 페타조니의 'nsenter'라는 도구를 사용해야 합니다.참조: https://github.com/jpetazzo/nsenter
할 때 : 하여:docker run -v /usr/local/bin:/target jpetazzo/nsenter
을 합니다 합니다.docker-enter <container-id>
컨테이너에 들어갈 수 있습니다.
갱신하다
0으로, 하려면, 0.9 으로, 까지 하려면 가 해야 이 를 해야 가 으로 /etc/default/docker
에'-e lxc'
데몬을 다시 시작하기 전에 도커 데몬 시작 옵션으로 이동합니다(호스트를 재부팅하여 이 작업을 수행했습니다).
이 모든 이유는...
...it [docker 0.9]에는 컨테이너를 시작할 때 LXC 이외의 다른 API를 사용할 수 있도록 하는 새로운 "엔진 드라이버" 추상화가 포함되어 있습니다.또한 LXC 도구를 사용하지 않고 Control Group을 처리할 수 있는 새로운 API 라이브러리(libcontainer)를 기반으로 한 새로운 엔진 드라이버를 제공합니다.핵심 문제는 lxc-attach에 의존하여 컨테이너 내부에서 셸을 시작하는 것과 같이 개발 환경에 미친 듯이 유용한 작업을 수행하는 경우...
이렇게 하면 도커 0.11의 새 호스트 전용 네트워킹 옵션 기능이 "작동"하는 것을 방지하고 루프백 인터페이스만 볼 수 있습니다. 버그 리포트
다른 질문에 대한 해결책도 이 질문에 대한 해결책이었던 것으로 드러났습니다.
...도커를 사용할 수 있습니다.
ps -notrunc
전체 lxc 컨테이너 ID를 얻은 후 사용하는 것.lxc-attach -n <container_id>
그 용기에 bash를 뿌리로 사용합니다.
업데이트: 곧 사용해야 합니다.ps --no-trunc
대신에ps -notrunc
감가상각되고 있습니다.
전체 컨테이너 ID 찾기
lxc attach 명령을 입력합니다.
위는 도커가 시작된 내 아파치 프로세스를 보여줍니다.
첫 번째 단계 컨테이너 ID 가져오기:
docker ps
이것은 당신에게 다음과 같은 것을 보여줄 것입니다.
컨테이너 ID IMAGE 명령 생성 상태 포트 이름
1170fe9e9460 로컬호스트: env-7e847468c4d73a0f35e9c5164046ad88 "/run_notebook.sh" 26초 전 업 25초 0.0.0.0:8989->999/twt SLURM_TASK-303337_0
1170fe9e9460
이 경우의 컨테이너 ID입니다.
두 번째로 도커를 입력합니다.
docker exec -it [container_id] bash
따라서 위의 경우:docker exec -it 1170fe9e9460 bash
docker exec -ti 'CONTAINER_NAME' sh
아니면
docker exec -ti 'CONTAINER_ID' sh
컨테이너 내에서 tmux/GNU Screen을 실행하는 것은 어떻습니까?간단한 방법으로 원하는 만큼 vty에 액세스할 수 있는 방법이 더 원활해 보입니다.
$ docker attach {container id}
nsenter
그렇게 합니다.하지만 저도 간단한 방법으로 컨테이너를 입력해야 했고 nsenter로는 부족했습니다.어떤 경우에는 버그가 있었습니다(검은색 화면에 -wd 플래그가 작동하지 않음).또한 특정 사용자와 특정 디렉토리에 로그인하고 싶었습니다.
저는 용기를 넣을 수 있는 도구를 직접 만들었습니다.https://github.com/Pithikos/docker-enter 에서 확인할 수 있습니다.
사용법도 간단합니다.
./docker-enter [-u <user>] [-d <directory>] <container ID>
docker exec -t -i container_name /bin/bash
컨테이너 콘솔로 이동합니다.
nsinit 방식은 다음과 같습니다.
nsinit 설치
git clone git@github.com:dotcloud/docker.git
cd docker
make shell
컨테이너 내부에서:
go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit
외부에서:
docker cp id_docker_container:/go/bin/nsinit /root/
써라
cd /var/lib/docker/execdriver/native/<container_id>/
nsinit exec bash
실행 중인 마이크로소프트/iis를 데몬으로 실행할 때 파워셸을 시작했습니다.
docker exec -it <nameOfContainer> powershell
윈도우 10에는 도커가 설치되어 있습니다.컨테이너에서 Jnekins를 실행하고 있는데 같은 오류 메시지를 받았습니다.다음은 이 문제를 해결하기 위한 단계별 가이드입니다.
1단계: gitbash를 열고 docker run -p 8080:80 -p 50000:50000 jenkins를 실행합니다.
2단계: 새 터미널을 엽니다.
3단계: 실행중인 컨테이너 목록을 가져오려면 "docker ps"를 수행합니다.컨테이너 ID를 복사합니다.
4단계: 이제 "docker exec -it {container id} sh" 또는 "docker exec -it {container id} bash"를 수행하면 "입력 장치가 TTY가 아닙니다.minty를 사용하는 경우 명령어 앞에 'winpty'를 붙여 보십시오."
5단계: 명령 실행 "$winpty docker exec -it {container id} sh"
vola!! 당신은 지금 터미널 안에 있습니다.
언급URL : https://stackoverflow.com/questions/20932357/how-to-enter-in-a-docker-container-already-running-with-a-new-tty
'programing' 카테고리의 다른 글
create if not exists view? (0) | 2023.09.08 |
---|---|
Elixir Ecto SQL comments /* comment /* 선택 1; (0) | 2023.09.08 |
오류 수정방법 "Microsoft에서 PowerShell 스냅인을 로드할 수 없습니다.파워쉘.다음 오류로 인한 진단: 파일 또는 어셈블리를 로드할 수 없습니다." (0) | 2023.09.08 |
Hibernate HQL에서 Oracle의 regexp_like를 사용하는 방법은 무엇입니까? (0) | 2023.09.08 |
ASP에서 "runAll Managed Modules For All Requests"의 올바른 사용법은 무엇입니까?NET MVC 2/3? (0) | 2023.09.08 |