2017-03-21 1 views
1

도커 작성을 사용하여 컨테이너를 가져 오려고합니다. ENTRYPOINT으로, 그 컨테이너에는 내가 작성한 간단한 bash 스크립트가 있습니다. 자, 아래의 방법으로 용기를 가져하려고하면사용자 지정 셸 스크립트를 도커 시작 지점으로 사용

  • docker-compose up
  • docker-compose up foo

가 완료되지 않습니다. 데몬에서

오류 응답 : 즉, 실행중인 컨테이너 (docker exec -i -t $1 /bin/bash) 연결을 시도, 실패 컨테이너 XYZ는 다시 시작 컨테이너가 실행 될 때까지 기다려야한다.

백그라운드에서 명령을 넣고 놀아 보았습니다. 그것은 작동하지 않았다. my-script.sh

cmd1 & 
cmd2 && 
... 
cmdn & 

또한와와와와 tty: true 옵션을 사용하지 않고 entrypoint: /bin/sh /usr/local/bin/my-script.shII)없이 I)을 시도했다. 주사위가 없다.

고정 표시기 - compose.yml

version: '2' 
services: 
    foo: 
    build: 
     context: . 
     dockerfile: Dockerfile.foo 
    ... 
    tty: true 
    entrypoint: /bin/sh /usr/local/bin/my-script.sh 

은 또한 단지 수동 고정 표시기 빌드/실행주기를 시도했다. 그리고 (실행하지 않고 /bin/shENTRYPOINT) 실행 그냥 종료됩니다.

$ docker build ... . 
$ docker run -it ... 
... shell echos commands here, then exits 
$ 

나는 그 무엇인가 간단합니다. 여기서 해결책은 무엇입니까?

당신이 tail -f application.log 나 이런 건 수와 같은 배경에서 컨테이너를 계속 실행 무한 뭔가를 넣어하는 데 필요한 모든의
+0

쉘 스크립트가 종료되면 컨테이너도 종료됩니다. 배경에 명령을 넣는 것은 좋은 생각이 아닙니다. – Henry

+0

@Henry 나는 백그라운드에서 내 마지막 명령을 넣으 려하지 않고 시도했다. 하지만 내 마지막 명령은 '터치 1.txt && tail -f 1.txt'를 차단하는 것이어야합니다. – Nutritioustim

답변

2

첫째 그래서 컨테이너 강타를 종료 할 그것은 당신이 할

백그라운드에서 실행 계속 경우에도 cmd1 & cmd2 &&...cmdn &을 수행 할 필요가 없습니다. my-script.sh에서 마지막 단계로 다음과 같은 명령어를 하나만 입력하십시오. touch 1.txt && tail -f 1.txt 그것은 당신의 컨테이너를 계속 실행합니다. 변경해야 할 한 가지는 docker run -it -d-d입니다. 배경 모드로 컨테이너를 시작합니다. docker exec -it container_name/id bash 디버그 문제를 해결하고 종료하십시오. docker stop container_id/name 이 도움말이 도움이되기를 바랍니다. . 감사합니다.

+2

네, 그렇습니다. 블로킹 명령 ('touch 1.txt && tail -f 1.txt')을 넣으면 그 문제가 해결됩니다. 건배 모두. – Nutritioustim

1

당신의 당신의 docker-compose.ymlentrypoint

entrypoint: /usr/local/bin/my-script.sh 

그냥 사용할 쉘을 지정하는 스크립트의 상단에 #! /bin/sh를 추가 할 필요가있다.

또한 엔트리 포인트 스크립트 맨 아래에 exec "[email protected]"을 추가해야합니다. 그렇지 않으면 즉시 종료되어 컨테이너를 종료합니다.