質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.85%

  • Docker

    574questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • docker-compose

    83questions

docker-compose buildでエラー

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 303

Green_man

score 9

実現したいこと

Docker-composeにてnode.jsをインストールしようとしたら以下のエラーがでてしまいました。

プロキシ環境のためプロキシ設定が誤っているのかと思っていますがどうもうまくいきません。
どなたかお知恵をお貸しいただけたら助かります><

発生しているエラー

[root@localhost MyApp]# docker-compose build
Building webserver
Step 1/5 : FROM node:8.9.4-alpine
---> 406f227b21f5
Step 2/5 : ENV NODE_ENV development
---> Using cache
---> 149ad8e41858
Step 3/5 : RUN npm install -g express-generator@4.15.0
---> Running in 18e3c3db23c2

npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! network request to https://registry.npmjs.org/express-generator failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-04-23T15_34_49_679Z-debug.log
ERROR: Service 'webserver' failed to build: The command '/bin/sh -c npm install -g express-generator@4.15.0' returned a non-zero code: 1

試したこと

以下サイトを参考にコマンドを実行しましたしました
https://qiita.com/yukin01/items/4f54496fd2f577c56b1d

プロキシ設定はdocker-compose.ymlに記述しています

プロキシ情報:
ID:greenman(仮)
PW:194581519(仮)
プロキシ名:proxy.com(仮)

version: '3'
services:
  webserver:
    build: node
    image: node-express-dev:1.0
    environment:
      HTTP_PROXY: http://greenman:1945815199@proxy.com:8080/
      HTTPS_PROXY: http://greenman:1945815199@proxy.com:8080/
    container_name: node
    tty: true
    volumes:
      - ./node/app:/app
    ports:
      - "3000:3000"

環境情報

OS:Centos7.4
カーネル:3.10.0-693.21.1.el7.x86_64
Docker:1.13.1

補足

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+2

【注意】

試したことにプロキシを設定とありますが、
貴方の環境はプロキシ越しでなければ普通にインターネットが使えない状況下ですか?

サーバーに接続出来ない場合はプロキシが原因かも?
…という趣旨のエラーメッセージを出しますが、プロキシ無しで普通にインターネットが使える場合は単なる罠です。
単にネットの調子が悪かったとか、dockerの初期設定が上手くいかなかったとか、そういった所を疑ってみて下さい。


あー…これは記事が悪いですね。
ベストプラクティス寄りにちょっと記事を修正しますね。

ベースイメージはnodeのalpineのlatest(一番新しいの)を使えば大丈夫です。
既にNode.jsは正式リリースされてますし、ビルトインのライブラリの挙動が変わってますよって脅しているだけで利用者視点でハマる事はほぼ皆無です。
特に勉強用なら常に最新使うくらいで良いでしょう。

ちょっと初期調査しますね。

$ docker run -it node:alpine sh

# node -v
v9.11.1

# npm -v
5.6.0

# pwd
/

その他docker-compose.ymlを作り直しましょう。
デフォのワークディレクトリは/のようですが、別にcdコマンドで移動すれば良いだけの話なんで変えなくても良いでしょう。

Linuxにはディレクトリ構成の規約Filesystem Hierarchy Standardがあります。
今回はこのマシンの/usr/local/srcにdocker-compose.ymlのあるディレクトリごと放り込めば良いでしょう。

名前も長いので削りましょう。
「ふん!webserverっていうのかい?贅沢な名前だねぇ…!今からお前の名はwebだ!いいかい、webだよ!」

従ってこれで完成。

version: '3'
services:
  web:
    image: node:alpine
    container_name: node
    tty: true
    volumes:
      - .:/usr/local/src
    ports:
      - "3000:3000"

この記事ではappの配下にバインドさせてましたが、
docker-compose.ymlがあるディレクトリをプロジェクトルートにしてください。
そっちの方が普通です。

まぁdocker-composeコマンドでコンテナを立ち上げる所までは同じなので省略

# 内部のコンテナに侵入
$ docker-compose exec -it web sh

# 束縛したプロジェクトルートへ移動
$ cd /usr/local/src

# カレントディレクトリの中身を確認
$ ls
docker-compose.yml

次にexpressコマンドを活性化させます。
1回しか使わないので、npm install -g express-generatorで入れれば大丈夫です。
コンテナを削除するとexpressコマンドは死にますが、また使う時に入れれば良いでしょう。

$ npm install -g express-generator

$ express -f --view=pug

> src@1.0.0 express /usr/local/src
> express


  warning: the default view engine will not be jade in future releases
  warning: use `--view=jade' or `--help' for additional options

destination is not empty, continue? [y/N] y

# だらららっとインストール成功の文字が流れる

$ npm install

$ npm start

元記事: ブラウザで http://localhost:8080 にアクセス

お前今さっき3000番ポートにバインドさせたやろ!
docker-compose.yml見ろって!

という訳で確認したら、たしかにNode.jsのアプリは3000番ポートで公開しようとしているようです。
従ってアクセスする先はhttp://localhost:3000です。


まとめ

少々長くなりましたがこんな感じで終わりです。
勉強頑張ってくださいね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Docker

    574questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • docker-compose

    83questions