2016-11-01 5 views
1

지난 두 시간 동안 Docker 컨테이너 시작시 startup.sh 스크립트를 시작하려했지만 어떤 이유로 작동하지 않습니다.Docker 컨테이너 시작시 bash 스크립트가 시작되지 않습니다.

내 Dockerfile 이미지를 만들 수 있습니다 :

FROM armv7/armhf-ubuntu:latest 
MAINTAINER Mohammed Noureldin <[email protected]> 
RUN apt update && apt upgrade -y && apt install -y mumble-server 
ADD scripts/startup.sh /startup.sh 

내 시작 스크립트 : 나는 스크립트 내부 파일뿐만 아니라 아무 일도을 만들려고하지만

#!/bin/bash 
/etc/init.d/mumble-server start 

아무것도 여기에 변화가 없습니다!

나는 명령 줄에서 직접 스크립트를 실행했는데, 왜 내가 모르는 작동하지 않습니다하려고 할 때 여기에 내가 무엇을 얻을

docker run --name murmur -itd --restart always --network bridge -p 64738:64738 -v /var/lib/mumble-server/ -v /etc/ mnoureldin/murmur:latest /bin/bash -c "bash /startup.sh;/bin/bash" 

그리고 :

고정 표시기 실행 명령

43b9d8dd4116bc605537c7af35ab186ca165ea6e957fab5908d39b2f085edf41 
[email protected]:~/Dockerfiles/Mumble $ docker attach murmur 
[email protected]:/# bash 
.dockerenv boot/  etc/  lib/  mnt/  proc/  run/  srv/  sys/  usr/ 
bin/  dev/  home/  media/  opt/  root/  sbin/  startup.sh tmp/  var/ 
[email protected]:/# bash startup.sh 
Usage: /etc/init.d/mumble-server {start|stop|restart|force-reload} 

을 아니면 스크립트의 두 줄 사이에 빈 줄이있을 때이 오류가 얻을 : 수동으로 스크립트를 실행하는

[email protected]:/# bash startup.sh 
startup.sh: line 2: $'\r': command not found 
Usage: /etc/init.d/mumble-server {start|stop|restart|force-reload} 

어떤 사람이 무엇을하고 있는지, 왜 효과가 없는지 설명 할 수 있습니까?

+1

'\ r' 오류는 쉘 스크립트가 Windows 줄 바꿈 (CRLF 또는'\ r \ n')을 사용하여 Bash를 혼동한다는 것을 의미합니다. 오류를 없애기 위해 스크립트를 Unix/Linux 줄 바꿈 (LF 또는'\ n')으로 변환해야합니다. 텍스트 편집기는 CRLF 대신 LF를 사용하도록 파일을 변환 할 수 있어야합니다 ... – nwinkler

+0

@nwinkler 두 번째 경우이지만 공백이없는 경우는 어떻게해야합니까? 어쨌든 당신이 말한대로 변환하려고합니다. –

+1

CRLF 대신 LF를 사용하여 파일을 시험해보십시오. 초기 문제도 해결할 수 있습니다. – nwinkler

답변

3

오류는 쉘 스크립트의 줄 끝으로 인해 발생합니다. 예기치 않은 r이 Bash를 혼란스럽게하는 Windows 줄 끝 (CRLF 또는 \r\n)을 사용하고있는 것 같습니다. Bash는 LF 또는 \n만을 예상하므로 오류 메시지가 표시됩니다.

대부분의 프로그래머 텍스트 편집기는 이러한 변경을 지원합니다. 메모장 ++에는 "편집> EOL 변환> 유닉스/OSX 형식"이 있습니다. 자세한 내용은 EOL conversion in notepad ++을 참조하십시오.

관련 문제