1

ここ数時間、docker コンテナーの開始時にスクリプトを開始しようとしましstartup.shたが、何らかの理由で機能しません。

イメージを作成するための私の Dockerfile:

FROM armv7/armhf-ubuntu:latest
MAINTAINER Mohammed Noureldin <m.n.e@hotmail.com>
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
mohammed@server01:~/Dockerfiles/Mumble $ docker attach murmur
root@43b9d8dd4116:/# bash
.dockerenv  boot/       etc/        lib/        mnt/        proc/       run/        srv/        sys/        usr/
bin/        dev/        home/       media/      opt/        root/       sbin/       startup.sh  tmp/        var/
root@43b9d8dd4116:/# bash startup.sh
Usage: /etc/init.d/mumble-server {start|stop|restart|force-reload}

または、スクリプトの 2 行の間に空の行があると、次のエラーが発生します。

root@830193e67fd7:/# bash startup.sh
startup.sh: line 2: $'\r': command not found
Usage: /etc/init.d/mumble-server {start|stop|restart|force-reload}

何が問題なのか、なぜそれが機能しないのかを誰かが説明できますか?

4

1 に答える 1

4

このエラーは、シェル スクリプトの行末が原因で発生します。Windows の行末 (CRLF、または\r\n) を使用しているようですが、予期しないrことが Bash を混乱させています。Bash は LF または のみを想定\nしているため、エラー メッセージが表示されます。

ほとんどのプログラマ テキスト エディタには、これらの変更を行うための何らかのサポートがあります。Notepad++ には、「編集 > EOL 変換 > Unix/OSX 形式」があります。詳細については、メモ帳 ++ での EOL 変換を参照してください。

于 2016-11-01T15:40:26.207 に答える