Create-react-appを使用して反応アプリをセットアップし、DockerコンテナーとDocker composeで実行しようとしました。しかし、Docker composeで実行すると、次のエラーが発生しました。
web_1 | Could not find a required file.
web_1 | Name: index.html
web_1 | Searched in: /usr/src/app/web_client/public
Windows 10とDockerクイックスタートターミナルを使用しています
これが私のフォルダ構造です:
vocabulary-app
|
web_client
|
node_modules/
public/
src/
package.json
package-lock.json
Dockerfile
yarn.lock
docker-compose.yml
docker-compose.yml
の内容は次のとおりです
### Client SERVER ###
web:
build: ./web_client
environment:
- REACT_APP_PORT=80
expose:
- 80
ports:
- "80:80"
volumes:
- ./web_client/src:/usr/src/app/web_client/src
- ./web_client/public:/usr/src/app/web_client/public
links:
- server
command: npm start
これがDockerfile
です
FROM node:9.0.0
RUN mkdir -p /usr/src/app/web_client
WORKDIR /usr/src/app/web_client
COPY . .
RUN rm -Rf node_modules
RUN npm install
CMD npm start
私はまた、ドッカーでファイルシステムを探索してみましたが、次の結果が得られました。
$ docker run -t -i vocabularyapp_web /bin/bash
root@2c099746ebab:/usr/src/app/web_client# ls
Dockerfile node_modules package.json src
README.md package-lock.json public yarn.lock
root@2c099746ebab:/usr/src/app/web_client# cd public/
root@2c099746ebab:/usr/src/app/web_client/public# ls
favicon.ico index.html manifest.json
これは基本的にindex.html
ファイルが存在することを意味するため、エラーメッセージについてさらに混乱しました。
誰かがこれに対する解決策を持っていますか?
Docker-composeファイルはありませんが、dockerコマンドを使用して同様の反応アプリを実行することができました
docker run -v ${PWD}:/app -v /app/node_modules -p 3001:3000 --rm app-name:dev
その後、localhost:3000
から自分の反応アプリにアクセスできました
Ubuntu 18.04サーバーにReact App uisng Dockerをデプロイするときにも同じ問題が発生しました。
問題は、以前のビルド全体の内容をアプリケーションの作業ディレクトリ(/app
)にコピーする手順を逃したことです。
解決方法は次のとおりです:
これをnpm i react
の後、npm run build
のステップの前のステップとして追加します。
COPY . /app
私のDockerfile全体は次のようになります。
# base image
FROM node:Alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install
RUN npm i react
COPY . /app
# start app
RUN npm run build
それでおしまい。
これが役に立てば幸いです
明示的なCOPY ./public/index.htmlを実行したところ、この問題はなくなりましたが、index.jsとindex.cssで同様のエラーが発生しました。これらに対して同じことを行うことで修正されました。