私が作成しているアプリはES6で記述されており、Dockerコンテナー内のwebpackによってその他の機能が変換されます。現時点では、内部ディレクトリの作成、依存関係のインストール、コンパイル済みバンドルファイルの作成など、すべてが機能しています。
代わりにコンテナを実行すると、dist/bundle.jsが存在しないと表示されます。ホストディレクトリにバンドルファイルを作成する場合を除いて、それは機能します。
Distディレクトリ用のボリュームを作成しようとしましたが、最初に機能しましたが、変更して再構築した後、新しい変更が反映されません。
私が達成しようとしていることは、コンテナにコンパイルされたバンドルをビルドして実行させることです。 CMD ["yarn", "start"]
はクラッシュしますがRUN ["yarn", "start"]
は機能するため、webpackパーツをビルドステップとして、または実行時にDockerfileに含めるかどうかはわかりません。
どんな提案やヘルプもありがたいです。前もって感謝します。
|_src
|_index.js
|_dist
|_bundle.js
|_Dockerfile
|_.dockerignore
|_docker-compose.yml
|_webpack.config.js
|_package.json
|_yarn.lock
docker-compose.yml
version: "3.3"
services:
server:
build: .
image: selina-server
volumes:
- ./:/usr/app/selina-server
- /usr/app/selina-server/node_modules
# - /usr/app/selina-server/dist
ports:
- 3000:3000
Dockerfile
FROM node:latest
LABEL version="1.0"
LABEL description="This is the Selina server Docker image."
LABEL maintainer="AJ [email protected]"
WORKDIR "/tmp"
COPY ["package.json", "yarn.lock*", "./"]
RUN ["yarn"]
WORKDIR "/usr/app/selina-server"
RUN ["ln", "-s", "/tmp/node_modules"]
COPY [".", "./"]
RUN ["yarn", "run", "build"]
EXPOSE 3000
CMD ["yarn", "start"]
.dockerignore
.git
.gitignore
node_modules
npm-debug.log
dist
package.json
{
"scripts": {
"build": "webpack",
"start": "node dist/bundle.js"
}
}
私はsrcツリー構造を含めていませんが、基本的にはあなたのものと同じです。次のDockerセットアップを使用して実行し、毎日開発する方法を説明します。
Package.jsonには
"scripts": {
"start": "npm run lint-ts && npm run lint-scss && webpack-dev-server --inline --progress --port 6868",
}
dockerfile
FROM node:8.11.3-Alpine
WORKDIR /usr/app
COPY package.json .npmrc ./
RUN mkdir -p /home/node/.cache/yarn && \
chmod -R 0755 /home/node/.cache && \
chown -R node:node /home/node && \
apk --no-cache add \
g++ gcc libgcc libstdc++ make python
COPY . .
EXPOSE 6868
ENTRYPOINT [ "/bin/ash" ]
docker-compose.ymlバージョン: "3"
volumes:
yarn:
services:
web:
user: "1000:1000"
build:
context: .
args:
- http_proxy
- https_proxy
- no_proxy
container_name: "some-app"
command: -c "npm config set proxy=$http_proxy && npm run start"
volumes:
- .:/usr/app/
ports:
- "6868:6868"
このDockerfileは、rootとして実行されているため、開発環境用の本番環境には適していません。
このDockerファイルを使用すると、問題が発生します。
Alpineはmuslにあり、ノードモジュールをホストにインストールするとglibにあるので、コンパイルされたネイティブはDockerコンテナーで動作しません。コンテナーが起動したら、エラーが発生した場合、これを実行して修正します(少し)今すぐ絆創膏の)
docker-compose exec container_name_goes_here /bin/ash -c "npm rebuild node-sass --force"
ikkyですが、機能します。
最初にビルドを実行するようにpackage.json
の開始スクリプトを変更してみてください(これを行うと、RUN
でビルドを実行するためにDockerfile
コマンドは必要なくなります:
{
"scripts": {
"build": "webpack",
"start": "webpack && node dist/bundle.js"
}
}