2017-06-05 9 views
1

別の.shファイルをスクリプトで使用し、Dockerfileにシェルスクリプトコードをすぐに追加したくありません。しかし、私はイメージビルド時にエラーメッセージが表示されます。エラー:Dockerfile内のシェルスクリプトの予期しないファイルの終わり( "do"が予想されます)

/binに/ SH:構文エラー:ファイルの予期しない終わり(期待は「やる」)

ここではスクリプトを使用してDockerfileの一部です:

RUN cat .env | while [ read LINE ] \ 
do \ 
    envName=$(echo "$LINE" | grep -o "^[^\=]*") \ 
    echo "PassEnv $envName" >> httpd.conf \ 
done 

何が間違っていますか?

答えて

1

角括弧[]を削除し、\を参照しているときにドッカーが行を結合するので、行末に;を使用するとコマンドが溶けます。

これは私のために働いている:

RUN cat .env | while read LINE ;\ 
    do \ 
     envName=$(echo "$LINE" | grep -o "^[^\=]*"); \ 
     echo "PassEnv $envName" >> httpd.conf ;\ 
    done 
+1

これは私のために働いた、ありがとう! –

+0

いつでも歓迎! – Robert

0

while構築物はdoは(セミコロンの後に表示されるか、)別の行にあることを期待。だからあなたはおそらく望むでしょう:

RUN cat .env | while [ read LINE ]; \ 
do \ 
    envName=$(echo "$LINE" | grep -o "^[^\=]*") \ 
    echo "PassEnv $envName" >> httpd.conf \ 
done 

最初の行にセミコロンがあることに注意してください。

関連する問題