2017-12-15 5 views
0

DockerとDocker Composeを使用してsails jsのプロジェクトを作成しようとしています。私が欲しいのは、Dockerの内部にsailsコードを生成し、現在のディレクトリに構造体を生成することです。sails jsプロジェクトをドッキングしようとしています

Dockerfiledocker-compose.ymlがあるため、ディレクトリが空ではないため、生成しようとすると、ディレクトリが空ではないというエラーが表示されます。

これはDockerfileです:

この構成で
FROM node:8.9.3 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

COPY . /usr/src/app 

RUN npm install -g sails 
RUN sails new . 
RUN sails lift 

私は、現在のディレクトリの誤差が空ではありません取得します。

考えてみると、コードの生成とコピーが試行されました。

... 

RUN npm install -g sails 
RUN sails new . 

# I do the COPY after generating the code 
COPY . /usr/src/app 

RUN sails lift 

これは、ローカル環境でエラーが発生しないため、生成されたコードがないため動作しているようです。

多分、このプロセスが間違っていて、それを依存関係としてインストールしてから、コードを生成するためにコンテナをdocker-composeで実行する必要があります。しかし、空でないディレクトリにコードを生成しようとしても同じ問題があります。

+1

あなたが達成しようとしているものは混乱しています。 'sails new'コマンドは、ビルドコンテキストから既にコピーしているソースコードを作成するコマンドです。私はあなたがどちらか一方をしていると思います(両方ではない)。プロジェクトがすでに 'sails new'でローカルに作成されていた場合、なぜ' docker build'時にそれを実行しますか? –

+0

Docker内で 'sails'コードを生成するのは正しくないかもしれません。おそらく私は地元でそれを行い、Dockerのイメージでそれらをコピーする必要があります。しかし、ローカルノードを使用したくない場合は、Dockerを使用してインストールしたいのですが、空ではないため、現在のディレクトリにコードを生成できないという問題があります。 – abaracedo

+0

2回目の反復で、コピーの後にこの 'WORKDIR/usr/src/app'を追加する必要があります –

答えて

1

ここでは、2つの別々の画像を使用するアイデアがあります。 1つはSailsユーティリティイメージで、もう1つは実際のアプリケーションです。

ユーティリティイメージ

まず、Sailsユーティリティイメージ。これはかなり簡単です。 SailsがインストールされたNode.jsに基づく画像です。新しいディレクトリに次のDockerfileを作成します。

FROM node:8.9.3 
RUN npm install -g sails 
WORKDIR /usr/src/app 
ENTRYPOINT ["sails"] 

そして、それを構築する:

docker build -t sails . 

これはさらに一般的なイメージである可能性があります。あなたのプロジェクトに固有のことは何もありません。 sailsコマンドを実行するために使用します。

アプリケーション

、別の新しいフォルダを作成し、そこに移動します。それは空である必要があります。

docker run -it --rm -v $PWD:/usr/src/app sails new . 

これで、ユーティリティイメージを使用して現在のディレクトリにSailsプロジェクトが作成されます。これが新しいSailsプロジェクトの根幹です。

このSailsプロジェクト用にDockerfile.dockerignoreファイルを作成しましょう。そのためには、重い荷物のほとんどを処理するためにnode画像の-onbuildの変形に依存します。次Dockerfileを作成します。

FROM node:8.9.3-onbuild 
EXPOSE 1337 

も伴う.dockerignoreファイル:アプリケーションは、我々が使用してそれを起動することができ構築された後

docker build -t myproject 

node_modules 

今、私たちはアプリケーションを構築することができます:

docker run -p 1337:1337 myproject 

Node.js画像の-onbuildの亜種はnpm installで、デフォルトのコマンドはnpm startです。デフォルトのSails package.jsonnode app.jsを使用してアプリケーションを実行するようにstartスクリプトを設定します。詳細については、https://github.com/nodejs/docker-node/blob/master/8/onbuild/Dockerfileを参照してください。

+0

説明していただきありがとうございます。 – abaracedo

関連する問題