2017-07-14 11 views
2

私のマルチステージビルドでは、コピーするときに/assets/cssディレクトリが見つかりません。私は何を変更する必要がありますか?マルチステージビルド - そのようなファイルやディレクトリがありません

ドッカーバージョン

バージョン17.06.0-CE-mac17(18432)

チャンネル:エッジ

4bb7a7dfa0

MYIMAGE:私は、多段階のビルドに使用SASS画像

FROM ruby:2.4.1-slim 

RUN mkdir /assets 
VOLUME /assets 

RUN gem install sass 
ENTRYPOINT ["sass"] 

マルチステージビルドドッカーファイル

最初の画像cd /assets/css && ls && pwdで実行したデバッグコマンドに注意してください。結果はビルドフェーズで表示されます。

# Compile Sass 
FROM myimage/sass AS builder 
COPY app/assets/sass /assets/sass 
RUN sass --update --force --sourcemap=none --stop-on-error /assets/sass:/assets/css &&\ 
    # sass directory isn't needed 
    rm -r assets/sass &&\ 
    # debugging: check /assets/css exists inside the container 
    cd /assets/css && ls && pwd 

FROM alpine:3.6 
WORKDIR /app 
RUN mkdir /app/logs 
VOLUME ["/app/logs"] 
COPY --from=builder /assets/css /app/assets/css 
EXPOSE 80 
CMD ["./bin/bash"] 
Raw 

出力docker build -t myimage:css .

通知/assets/cssディレクトリを示すステップ3/11にcd /assets/css && ls && pwdの出力が存在し、それがなぜ/assets/cssをすることはできません

Step 1/11 : FROM myimage:sass AS builder 
---> 7c6662186d55 
Step 2/11 : COPY app/assets/sass /assets/sass 
---> 76b5d86846b8 
Removing intermediate container ee74d16617b4 
Step 3/11 : RUN sass --update --force --sourcemap=none --stop-on-error /assets/sass:/assets/css && rm -r assets/sass && cd /assets/css && pwd 
---> Running in 83dc591edc5c 
    directory /assets/css 
     write /assets/css/main.css 
main.css 
/assets/css 
---> 3939f46fb355 
Removing intermediate container 83dc591edc5c 
Step 4/11 : FROM alpine:3.6 
---> 7328f6f8b418 
Step 5/11 : WORKDIR /app 
---> 19ad596f9fc1 
Removing intermediate container 790fac2040f1 
Step 6/11 : RUN mkdir /app/logs 
---> Running in cb66151a4694 
---> 18d6c4970d04 
Removing intermediate container cb66151a4694 
Step 7/11 : VOLUME /app/logs 
---> Running in b8a98a38a054 
---> fa68603ccf30 
Removing intermediate container b8a98a38a054 
Step 8/11 : COPY --from=builder /assets/css /app/assets/css 
COPY failed: stat /var/lib/docker/aufs/mnt/0ddcc250ed9c4eb1de46305e62cb2303274b027b2c9b0ddd09471fce3c3ed619/assets/css: no such file or directory 

内部main.cssファイルを持っています最終画像にコピーされますか?なぜDockerエンジンがそれを見つけることができないのですか?

+0

あなたがドッカーのどのバージョンを使用している:とすることを

チェック! 17.06CEまたは17.05CEエッジを使用していますか?古いバージョンを使用している場合、多段ビルドはサポートされません。 –

答えて

3

これは問題です:

VOLUME /assets 

各ビルドステップが新しいランニングコンテナです。新しい各コンテナは、名前のないボリュームのドロップを破棄します。

RUN sass --update --force --sourcemap=none --stop-on-error /assets/sass:/assets/css &&\ 
    # sass directory isn't needed 
    rm -r assets/sass 
RUN cd /assets/css && ls && pwd 

(個別のRUN)

+0

非常に興味深い! SassソースファイルをDockerの名前のないボリューム( '/ assets/css'の代わりに'/css')の外のディレクトリにコンパイルすることで問題を解決しました。ありがとうございました。 – sargas

関連する問題