Dockerマルチステージビルドはインストールされたアプリケーションを認識しません

無限の可能性
FROM some-build:latest as build

COPY / /var/www/html

WORKDIR /var/www/html
RUN cd /var/www/html && composer install

FROM some-build2:latest as run

COPY --from=build /var/www/html /var/www/html

ENV PATH ${HOME}/local/bin:${PATH}:/home/site/wwwroot

RUN cd /var/www/html && \
    npm install && \
    npm run production

ENTRYPOINT ["/bin/init_container.sh"]

イメージにrunは、がインストールされていnpmます。この事実にもかかわらずnpm install、エラーを返します。/bin/sh: 1: npm: not found

これはどのように可能ですか?私は何が間違っているのですか?


編集:

@BMitchのコメントへの回答として、RUNイメージを実行すると、コンテナー内でノードがPATH上にあり、それを使用できます。パスは/root/local/binです。すべてのDockerfileを添付しました。

私は3つのdockerファイルを持っています:
APP
あなたが以前に見たもの。

実行

FROM php:7.2.5-apache
MAINTAINER Azure App Services Container Images <[email protected]>

COPY apache2.conf /bin/
COPY init_container.sh /bin/

RUN a2enmod rewrite expires include deflate

# install the PHP extensions we need
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
     libpng-dev \
     libjpeg-dev \
     libpq-dev \
     libldap2-dev \
     libldb-dev \
     libicu-dev \
     libgmp-dev \
     mysql-client \
     libmagickwand-dev \
     openssh-server vim curl wget tcptraceroute \
    && chmod 755 /bin/init_container.sh \
    && echo "root:Docker!" | chpasswd \
    && echo "cd /home" >> /etc/bash.bashrc \
    && ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so \
    && ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so \
    && ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h \
    && rm -rf /var/lib/apt/lists/* \
    && pecl install imagick-beta \
    && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
    && docker-php-ext-configure mysqli --with-mysqli=mysqlnd \
    && docker-php-ext-install gd \
     mysqli \
     opcache \
     pdo \
     pdo_mysql \
     pdo_pgsql \
     pgsql \
     ldap \
     intl \
     gmp \
     zip \
     bcmath \
     mbstring \
     pcntl \
     xml \
     xmlrpc \
    && docker-php-ext-enable imagick

###################
# Installing node #
###################

RUN apt-get update -yq && apt-get upgrade -yq && \
apt-get install -yq g++ libssl-dev apache2-utils curl git python make nano

# setting up npm for global installation without sudo
# http://stackoverflow.com/a/19379795/580268
RUN MODULES="local" && \
    echo prefix = ~/$MODULES >> ~/.npmrc && \
    echo "export PATH=\$HOME/$MODULES/bin:\$PATH" >> ~/.bashrc && \
    . ~/.bashrc && \
    mkdir ~/$MODULES && \
\
# install Node.js and npm
# https://gist.github.com/isaacs/579814#file-node-and-npm-in-30-seconds-sh
    mkdir ~/node-latest-install && cd $_ && \
    curl http://nodejs.org/dist/v8.11.3/node-v8.11.3.tar.gz | tar xz --strip-components=1 && \
    ./configure --prefix=~/$MODULES && \
    make install && \
    curl -L https://www.npmjs.org/install.sh | sh

# optional, check locations and packages are correct
# RUN which node; node -v; which npm; npm -v; \
#   npm ls -g --depth=0

# Remove unnecessary packages
# RUN apt-get -yq purge g++ libssl-dev curl git python make nano
# RUN apt-get -yq autoremove

###################

RUN   \
   rm -f /var/log/apache2/* \
   && rmdir /var/lock/apache2 \
   && rmdir /var/run/apache2 \
   && rmdir /var/log/apache2 \
   && chmod 777 /var/log \
   && chmod 777 /var/run \
   && chmod 777 /var/lock \
   && chmod 777 /bin/init_container.sh \
   && cp /bin/apache2.conf /etc/apache2/apache2.conf \
   && rm -rf /var/www/html \
   && rm -rf /var/log/apache2 \
   && mkdir -p /home/LogFiles \
   && ln -s /home/LogFiles /var/log/apache2 


RUN { \
        echo 'opcache.memory_consumption=128'; \
        echo 'opcache.interned_strings_buffer=8'; \
        echo 'opcache.max_accelerated_files=4000'; \
        echo 'opcache.revalidate_freq=60'; \
        echo 'opcache.fast_shutdown=1'; \
        echo 'opcache.enable_cli=1'; \
    } > /usr/local/etc/php/conf.d/opcache-recommended.ini

RUN { \
        echo 'error_log=/var/log/apache2/php-error.log'; \
        echo 'display_errors=Off'; \
        echo 'log_errors=On'; \
        echo 'display_startup_errors=Off'; \
        echo 'date.timezone=UTC'; \
    } > /usr/local/etc/php/conf.d/php.ini


COPY sshd_config /etc/ssh/

EXPOSE 2222 8080

ENV APACHE_RUN_USER www-data
ENV PHP_VERSION 7.2.5

ENV PORT 8080
ENV WEBSITE_ROLE_INSTANCE_ID localRoleInstance
ENV WEBSITE_INSTANCE_ID localInstance
ENV PATH ${PATH}:/home/site/wwwroot

ENTRYPOINT ["/bin/init_container.sh"]

構築する

FROM composer:latest as composer

FROM php:7.2.5-apache as apache

COPY --from=composer /usr/bin/composer /usr/bin/composer

RUN apt-get update && \
apt-get install git zip unzip -y

編集2:コマンド
を削除RUN npm...すると、ビルド全体が成功し、結果のイメージにnpmが含まれ、それを使用できることが重要です(インタラクティブモードでコンテナーを使用して確認しました)。


編集3:
すぐに試すことができるもっと簡単な解決策は次のとおりです。

FROM alpine as img1
RUN echo "$HOME" > $HOME/test.txt

FROM alpine as img2
RUN cat $HOME/test.txt

結果は次のとおりです。 cat: can't open '/root/test.txt': No such file or directory

BMitch

ここで起こっている2つの問題。「php:7.2.5-apache」イメージのパスには/ root / local / binが含まれず、ビルド中にパスに追加しませんでした。npmコマンドは、環境をセットアップするシェルログインスクリプトにいくつかの変更が加えられているため、インタラクティブにログインするときに機能します。npmコマンドを実行する前に、これらの環境設定スクリプトを実行する必要があります。これは、同じRUNコマンド内で実行する必要があります。自分で確認するには、.bashrcで変数またはコマンドをチェックして、npm環境をセットアップします。また、PATH値をenvインタラクティブシェルとビルドのコマンドと比較することで、環境が異なることを確認できます。これが問題である場合は、2つの異なる出力が表示されます。実行イメージの一部を実行すると、.bashrcに次のように表示されました。

export PATH=$HOME/local/bin:$PATH

したがって、実行イメージのDockerfileの行を更新する必要があります。

ENV PATH /root/local/bin:${PATH}:/home/site/wwwroot

あなたの編集3によると、それはまったく別の問題です。1つの新しいイメージでファイルを作成してから、ファイルが存在しないベースイメージに戻りました。マルチステージビルドでファイルを表示したい場合は、ステージ間でファイルをコピーするか、前のイメージを「from」として使用する必要があります。

FROM alpine as img1
RUN echo "$HOME" > $HOME/test.txt

FROM alpine as img2
COPY --from=img1 /root/test.txt /root/test.txt
RUN cat $HOME/test.txt

または

FROM alpine as img1
RUN echo "$HOME" > $HOME/test.txt

FROM img1 as img2
RUN cat $HOME/test.txt

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Web Viewはビルドされたアプリケーションのページをロードしますが、フライト展開バージョンはテストしません

分類Dev

ubuntu:errorにAWSelasticbeanstalkコマンドラインツールをインストールする 'awsebcli == 3.10.0'ディストリビューションが見つかりませんでした。これは、アプリケーションで必要です。

分類Dev

SpringBootは、マルチモジュールJavaアプリケーションの別のモジュールからのRestControllerを認識しません

分類Dev

SpringBootは、マルチモジュールJavaアプリケーションの別のモジュールからのRestControllerを認識しません

分類Dev

littlerはインストールされたパッケージを認識しません

分類Dev

スナップアプリケーションは別のパーティションのファイルを認識しません

分類Dev

Android Studioビルドアプリケーションエラー:プロトコル障害(ステータスを読み取れませんでした)

分類Dev

Google Cloud Composer、エアフロージョブはインストールされたPyPiパッケージを認識できません

分類Dev

Flutter:デバイス用にプリコンパイルされたアプリケーションをビルドできませんでした。iPhoneでアプリケーションを起動中にエラーが発生しました

分類Dev

新しく作成されたリリースブランチが最初にビルドされない場合、GitVersionはTeamCityでの開発ブランチビルドのマイナーバージョンをバンプしません

分類Dev

サードパーティのパッケージをインストールしますが、インポートパスが認識されません

分類Dev

ラズビアンジェシーにインストールされたPythonモジュールはPythonスクリプトでは機能しません

分類Dev

IntelliJは、gradleでビルドされたSpring Bootアプリケーションを終了しません

分類Dev

AnsibleはインストールされたPythonモジュールを認識しません

分類Dev

PyCharmはVirtualEnvにインストールされたモジュールを認識しません

分類Dev

コンテナーがマルチステージビルドで使用される場合、Dockerはエントリポイントを実行しますか?

分類Dev

インストールされたアプリケーションはMySQL.Data.DLLをロードできませんか?

分類Dev

エラーのあるAlphineLinuxを使用したDockerビルドSofteWare 'インストール:認識されないオプション:strip-program = strip'

分類Dev

JavaアプリケーションはUTF-8でエンコードされたテキストファイルを読み取りますが、antビルド後に文字が期待どおりではありません

分類Dev

ターミナルはインストールされたプログラムを認識しません

分類Dev

ターミナルはインストールされたプログラムを認識しません

分類Dev

インストールされたアプリケーションが機能していないか、アンインストールできません

分類Dev

Azureに登録されているアプリケーションでマルチテナントとして認証を更新できません

分類Dev

インストール後にカルマを実行すると「カルマ」が内部または外部コマンドとして認識されません

分類Dev

アンドロイドを使用して音声コマンド(グーグルアシスタント)を介して私のアンドロイドアプリケーション内で指定されたアクティビティを開く方法

分類Dev

Electron アプリがインストールされたアプリケーションの更新を認識しない

分類Dev

Xcodeはインストールされたアプリケーションを見つけることができませんでした

分類Dev

Xcodeはインストールされたアプリケーションを見つけることができませんでした

分類Dev

ブートストラップナビゲーションバーのマテリアルアイコンが正しく配置されていません

Related 関連記事

  1. 1

    Web Viewはビルドされたアプリケーションのページをロードしますが、フライト展開バージョンはテストしません

  2. 2

    ubuntu:errorにAWSelasticbeanstalkコマンドラインツールをインストールする 'awsebcli == 3.10.0'ディストリビューションが見つかりませんでした。これは、アプリケーションで必要です。

  3. 3

    SpringBootは、マルチモジュールJavaアプリケーションの別のモジュールからのRestControllerを認識しません

  4. 4

    SpringBootは、マルチモジュールJavaアプリケーションの別のモジュールからのRestControllerを認識しません

  5. 5

    littlerはインストールされたパッケージを認識しません

  6. 6

    スナップアプリケーションは別のパーティションのファイルを認識しません

  7. 7

    Android Studioビルドアプリケーションエラー:プロトコル障害(ステータスを読み取れませんでした)

  8. 8

    Google Cloud Composer、エアフロージョブはインストールされたPyPiパッケージを認識できません

  9. 9

    Flutter:デバイス用にプリコンパイルされたアプリケーションをビルドできませんでした。iPhoneでアプリケーションを起動中にエラーが発生しました

  10. 10

    新しく作成されたリリースブランチが最初にビルドされない場合、GitVersionはTeamCityでの開発ブランチビルドのマイナーバージョンをバンプしません

  11. 11

    サードパーティのパッケージをインストールしますが、インポートパスが認識されません

  12. 12

    ラズビアンジェシーにインストールされたPythonモジュールはPythonスクリプトでは機能しません

  13. 13

    IntelliJは、gradleでビルドされたSpring Bootアプリケーションを終了しません

  14. 14

    AnsibleはインストールされたPythonモジュールを認識しません

  15. 15

    PyCharmはVirtualEnvにインストールされたモジュールを認識しません

  16. 16

    コンテナーがマルチステージビルドで使用される場合、Dockerはエントリポイントを実行しますか?

  17. 17

    インストールされたアプリケーションはMySQL.Data.DLLをロードできませんか?

  18. 18

    エラーのあるAlphineLinuxを使用したDockerビルドSofteWare 'インストール:認識されないオプション:strip-program = strip'

  19. 19

    JavaアプリケーションはUTF-8でエンコードされたテキストファイルを読み取りますが、antビルド後に文字が期待どおりではありません

  20. 20

    ターミナルはインストールされたプログラムを認識しません

  21. 21

    ターミナルはインストールされたプログラムを認識しません

  22. 22

    インストールされたアプリケーションが機能していないか、アンインストールできません

  23. 23

    Azureに登録されているアプリケーションでマルチテナントとして認証を更新できません

  24. 24

    インストール後にカルマを実行すると「カルマ」が内部または外部コマンドとして認識されません

  25. 25

    アンドロイドを使用して音声コマンド(グーグルアシスタント)を介して私のアンドロイドアプリケーション内で指定されたアクティビティを開く方法

  26. 26

    Electron アプリがインストールされたアプリケーションの更新を認識しない

  27. 27

    Xcodeはインストールされたアプリケーションを見つけることができませんでした

  28. 28

    Xcodeはインストールされたアプリケーションを見つけることができませんでした

  29. 29

    ブートストラップナビゲーションバーのマテリアルアイコンが正しく配置されていません

ホットタグ

アーカイブ