2

私はDocker、Ghost、およびノー​​ドに本当に慣れていないので、ここで露骨な無知を許してください。

イメージに基づいて Ghost 用の Docker イメージ/コンテナーをセットアップしようとしてgoogle/nodejs-runtimeいますが、Docker 経由で実行するとサーバーに接続できません。

いくつかの詳細: 私は OS X を使用しているので、I'm boot2docker を使用しています。ポート 8080 を使用するように構成された npm モジュールとして Ghost を実行していますgoogle/nodejs-runtime。を使用すると、この構成は Docker の外部で正常に動作しますnpm start。また、ポート 8080 で Docker 内から動作する単純な "Hello, World" Express アプリも試しました。

私のディレクトリ構造は次のようになります。

  • my_app
    • コンテンツ/
    • Dockerfile
    • ghost_config.js
    • パッケージ.json
    • サーバー.js

package.json

{
  "name": "my_app",
  "private": true,
  "dependencies": {
    "ghost": "0.5.2",
    "express": "3.x"
  }
}

Dockerfile

FROM google/nodejs-runtime

ghost_config.js

ポート 2368 をすべて 8080 に変更しました。

server.js

// This Ghost server works with npm start, but not with Docker
var ghost = require('ghost');
var path = require('path');

ghost({
  config: path.join(__dirname, 'ghost_config.js')
}).then(function (ghostServer) {
  ghostServer.start();
});

// This "Hello World" app works in Docker
// var express = require('express');
// var app = express();

// app.get('/', function(req, res) {
//   res.send('Hello World');
// });

// var server = app.listen(8080, function() {
//   console.log('Listening on port %d', server.address().port);
// });

で Docker イメージをビルドしdocker build -t my_app .、 で実行するとdocker run -p 8080 my_app、コンソールに次のように出力されます。

> my_app@ start /app
> node server.js

Migrations: Up to date at version 003
Ghost is running in development... 
Listening on 127.0.0.1:8080 
Url configured as: http://localhost:8080 
Ctrl+C to shut down

docker ps出力:

CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS              PORTS                     NAMES
4f4c7027f62f        my_app:latest   "/nodejs/bin/npm sta   23 hours ago        Up About a minute   0.0.0.0:49165->8080/tcp   pensive_lovelace

そしてboot2docker ip出力:

The VM's Host only interface IP address is: 192.168.59.103

ブラウザで 192.168.59.103:49165 を指定すると、Docker ログに何も出力されません。上で述べたように、「Hello World」アプリを同じように実行するとserver.js問題なく動作します。

私にはすべてが正しいように見えます。私が見る唯一の奇妙なことは、sqlite3が次のnpm install中に失敗することですdocker build:

[sqlite3] Command failed: 
module.js:356
  Module._extensions[extension](this, filename);
                               ^
Error: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found 

...

node-pre-gyp ERR! Testing pre-built binary failed, attempting to source compile 

しかし、ソースのコンパイルは問題なく成功しているようです。

ここでばかげたことをしているだけだといいのですが。

4

2 に答える 2

0

Dockerfile では、このコマンドが必要ですEXPOSE 8080。しかし、それはそのポートが Docker コンテナーの外部からアクセスできるようにするだけです。そのイメージからコンテナーを実行するときは、そのポートを「マップ」する必要があります。例えば:

$ docker run -d -t -p 80:8080 <imagename>

実行中は、コンテナー内の-p 80:8080ポート '8080' を外部のポート '80' に転送します。

構文はいつも私を混乱させます (逆だと思います)。

于 2014-10-22T12:29:38.967 に答える