2017-02-14 16 views
1

ドッカーには新しく、アプリケーションを移植することを試みました。基本的に、起動時に、私はスクリプトにカプセル化した環境依存の作業をいくつか実行する必要があります。ドッカービルドにそのようなファイルやディレクトリがありません

私のアプリはここ

Dockerfile 
scripts/run.sh 
build-development/stuff 
build-production/stuff 

のように見える私のDockerfileです:

FROM nginx 
RUN chmod +x scripts/run.sh 
CMD ["scripts/run.sh", APP_ENV] 
EXPOSE 80 

、ここでは、スクリプト/ run.shです:

#!/bin/bash 

mkdir dist 

chmod -R 777 dist 

if [ $1 == "development" ] 
then 
    cp -R build-development/. /usr/share/nginx/html 
fi 

if [ $1 == "stage" ] 
then 
    cp -R build-production/. /usr/share/nginx/html 
    sed -i 's/production/stage/g' dist/index.html 
fi 

if [ $1 == "production" ] 
then 
    cp -R build-production/. /usr/share/nginx/html 
fi 

アイデアは、私が実行されるということです画像は以下のようになります:

docker run -e APP_ENV=development app-name 

がスクリプトに入力され、正しいファイルがコピーされます。

docker build -t app-name . 

私は

スクリプト/ run.shファイルまたはディレクトリ

ないことに関するエラーを取得:ビルドステップの間にあるため

残念ながら、私はイメージを実行するために取得することはありません

なぜこのエラーが発生しているのか分かりませんが、私はそれが私の邪魔になっていると思います。私は間違って何をしていますか、私はどのようにプロジェクトを動かすことができますか?

ありがとうございます。

答えて

3

scripts/run.shがコンテナの一部であるように思われます。その場合、chmodを実行する前にイメージにコピーする必要があります。

FROM nginx 
COPY scripts/run.sh /scripts/run.sh 
RUN chmod +x /scripts/run.sh 
CMD ["/scripts/run.sh", APP_ENV] 

あなたの後にRUNCMDが利用でき、そのパスを持っているので、これは、/scripts/run.shで画像に./scripts/run.sh(ビルドディレクトリからの相対)をコピーします。

1

私はこの問題に遭遇しましたが、私はウィンドウ内で編集していました。これは文字 '/ r'を新しい行に追加しています。これはSHではなくbashでエラーを引き起こしていました。それを理解するには数時間のうちに良いところがありました。もう1つの問題はタブとスペースであり、コマンドを実行したときにシェルをスローしていました。

私はそれが私が得ていたエラーの問題であったので、私はそれを追加すると思った。

メモ帳++を使用している場合は、実際に行末とテキストエンコードを変更できます。私は通常シェルがエラーを投げないようにANSIとunixの行末に切り替えます。

それ以外はすべてうまくいっていました。ウィンドウの編集時に行末が追加されました。なぜシェルが余分な行末を処理できないのかわからないが、他の誰かがエラーを起こしたときにこれが起こっている可能性があります。そのようなファイルはありません。私はまた、ドッカーファイルがLinuxで元々設定されていたとしても、+ xをスクリプトに追加していたことを確認しなければなりませんでした。それ以外の場合、実行可能な権限を失うことなく、ドッカーファイル/ファイルをコンピュータにダウンロードします。

+1

ありがとうございます。ドッカー・フォー・ウィン+ WSL環境でも同様の問題が発生し、EOL/rが問題でした。ありがとうありがとう! – raupie

関連する問題