web-dev-qa-db-ja.com

Dockerコンテナーからwebpackビルドを実行するにはどうすればよいですか?

私が作成しているアプリは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"
  }
}
16
AJ_1310

私は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ですが、機能します。

1
krystan honour

最初にビルドを実行するようにpackage.jsonの開始スクリプトを変更してみてください(これを行うと、RUNでビルドを実行するためにDockerfileコマンドは必要なくなります:

{
  "scripts": {
    "build": "webpack",
    "start": "webpack && node dist/bundle.js"
  }
}
0
willascend