programing

docker exec -it은 "tty가 아닌 입력에서 tty 모드를 활성화 할 수 없음"을 반환합니다.

nasanasas 2020. 12. 11. 08:18
반응형

docker exec -it은 "tty가 아닌 입력에서 tty 모드를 활성화 할 수 없음"을 반환합니다.


docker exec -it 명령은 "tty가 아닌 입력에서 tty 모드를 활성화 할 수 없습니다"라는 오류를 반환합니다.

level="fatal" msg="cannot enable tty mode on non tty input" 

centos box 6.6에서 docker (1.4.1)를 실행하고 있습니다. 다음 명령을 실행하려고하는데 docker exec -it containerName /bin/bash다음과 같은 오류가 발생합니다.

level="fatal" msg="cannot enable tty mode on non tty input" 

내 문제를 해결하는 docker exec -i대신 실행 합니다 docker exec -it. 실제로 내 스크립트는 터미널이 아닌 CRONTAB에서 시작되었습니다.

알림 :

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

  -i, --interactive=false    Keep STDIN open even if not attached  
  -t, --tty=false            Allocate a pseudo-TTY

Windows 도커 클라이언트 에서이 오류가 발생 하면 아래와 같이 실행 명령을 사용해야 할 수 있습니다.

$ winpty docker run -it ubuntu /bin/bash


"-i"사용

docker exec -i [your-ps] [명령]


Windows에서 docker-machine을 사용하고 GIT Bash 또는 Cygwin을 사용하는 경우 실행중인 컨테이너를 "내부"하려면 다음을 수행해야합니다.

docker-machine ssh default 가상 머신에 ssh하기 (Virtualbox 대부분)

docker exec -it <container> bash 용기에 들어갈 수 있습니다.

편집하다:

최근에 Windows PowerShell을 사용하는 경우 Cygwin 또는 Git Bash를 사용 winpty docker exec -it <container> bash하여 docker-machine ssh단계를 사용 하고 건너 뛸 수있는 컨테이너에 직접 exec를 고정 할 수 있음을 발견했습니다 .


boot2docker를 사용하는 Windows에서 다음 명령에 대해 "tty가 아닌 입력에서 tty 모드를 활성화 할 수 없습니다"라는 메시지가 나타납니다.

docker exec -it <containerIdOrName> bash

아래 명령은 문제를 해결했습니다.

winpty docker exec -it <containerIdOrName> bash

docker exec이미 실행중인 컨테이너에서 새 명령 을 실행 합니다. 새 컨테이너를 시작하는 방법이 아닙니다 docker run.

이것이 "non tty input"오류의 원인 일 수 있습니다. 또는 docker를 실행하는 곳일 수 있습니다. 진정한 터미널입니까? 즉, 전체 tty 세션을 사용할 수 있습니까? 대화 형 세션에 있는지 확인하고 싶을 수 있습니다.

[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'

에서 https://unix.stackexchange.com/questions/26676/how-to-check-if-a-shell-is-login-interactive-batch


Windows 용 Git과 함께 제공된 Mintty를 사용하여 Windows 7 64 비트에서 이와 동일한 오류 메시지가 발생했습니다. $docker run -i -t ubuntu /bin/bash cannot enable tty mode on non tty input

다른 답변이 제안했듯이 위의 명령에 winpty 접두사를 붙이려 고했지만 실행하면 아래에 또 다른 오류 메시지가 표시되었습니다. $ winpty docker run -i -t ubuntu /bin/bash exec: "D:\\Git\\usr\\bin\\bash": executable file not found in $PATH docker: Error response from daemon: Container command not found or does not exist..

그런 다음 내가 원하는 것을 제공하는 다음 명령을 실행했습니다. $ winpty docker run -i -t ubuntu bash root@512997713d49:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@512997713d49:/#


jenkins 작업에서 docker exec -it을 실행 중이며 '비 tty 입력에서 tty 모드를 사용할 수 없습니다'라는 오류가 발생합니다. docker exec 명령에 대한 출력이 반환되지 않습니다. 내 직업 로그인 순서는 다음과 같습니다.

jenkins shell -> ssh user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -it <container>

젠킨스의 초기 ssh에서 -T 플래그를 사용하도록 변경했습니다. "-T-의사 터미널 할당 비활성화". 그리고 -it 대신 docker exec와 함께 -i 플래그를 사용하십시오. "-i-대화 형. -t-의사 tty를 할당합니다.". 이것은 내 문제를 해결 한 것 같습니다.

jenkins shell -> ssh -T user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -i <container>

동작 종류는이 docker exec tty 버그와 일치합니다 : https://github.com/docker/docker/issues/8755 . 해당 도커 버그 토론에 대한 해결 방법은 다음을 사용하는 것이 좋습니다.

docker exec -it <CONTAINER> script -qc <COMMAND>

이 해결 방법을 사용해도 문제가 해결되지 않았습니다. 그래도 흥미 롭습니다. 다른 플래그를 사용하고 다른 ssh 호출에서 시도해보십시오 .-t를 docker exec와 함께 사용하더라도 'not a tty'를 볼 수 있습니다.

$ docker exec -it <CONTAINER> script -qc 'tty'
/dev/pts/0
$ docker exec -it <CONTAINER> 'tty'            
not a tty
$ docker exec -it <CONTAINER> bash -c 'tty' 
not a tty

참고 URL : https://stackoverflow.com/questions/29380344/docker-exec-it-returns-cannot-enable-tty-mode-on-non-tty-input

반응형