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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Q&A

1回答

2418閲覧

docker-compose buildでエラー

Green_man

総合スコア18

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

0グッド

0クリップ

投稿2018/04/23 06:40

#実現したいこと
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

#補足

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

【注意】

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

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


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

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

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

Sh

1$ docker run -it node:alpine sh 2 3# node -v 4v9.11.1 5 6# npm -v 75.6.0 8 9# pwd 10/

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

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

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

従ってこれで完成。

YAML

1version: '3' 2services: 3 web: 4 image: node:alpine 5 container_name: node 6 tty: true 7 volumes: 8 - .:/usr/local/src 9 ports: 10 - "3000:3000"

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

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

Bash

1# 内部のコンテナに侵入 2$ docker-compose exec -it web sh 3 4# 束縛したプロジェクトルートへ移動 5$ cd /usr/local/src 6 7# カレントディレクトリの中身を確認 8$ ls 9docker-compose.yml

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

Bash

1$ npm install -g express-generator 2 3$ express -f --view=pug 4 5> src@1.0.0 express /usr/local/src 6> express 7 8 9 warning: the default view engine will not be jade in future releases 10 warning: use `--view=jade' or `--help' for additional options 11 12destination is not empty, continue? [y/N] y 13 14# だらららっとインストール成功の文字が流れる 15 16$ npm install 17 18$ npm start

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

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

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


まとめ

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

投稿2018/04/23 07:51

編集2018/04/23 08:03
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問