質問: OS:Centos7.4 カーネル:3.10.0-693.21.1.el7.x86_64 Docker:1.13.1 補足 ==
回答: 【注意】 試したことにプロキシを設定とありますが、 貴方の環境はプロキシ越しでなければ普通にインターネットが使えない状況下ですか? サーバーに接続出来ない場合はプロキシが原因かも? ...という趣旨のエラーメッセージを出しますが、プロキシ無しで普通にインターネットが使える場合は単なる罠です。 単にネットの調子が悪かったとか、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`です。 まとめ 少々長くなりましたがこんな感じで終わりです。 勉強頑張ってくださいね。