docker运行将我放入一个节点repl中



当我运行docker run -p 8080:3000 --name cabinfeverInstance -t something/cabinfever时,我会被放入Node.js的REPL中,当我希望看到"监听端口:3000";。转到localhost:8000会导致";没有发送任何数据。ERR_EMPTY_REPONSE";。我没有发现其他发生这种情况的例子(也许我没有在谷歌上搜索正确的单词/棘手的短语(。我确实发现这个问题似乎有些关联。他们的解决方案是";使容器化的应用程序期望来自windows主机IP(而不是容器IP(的请求";,但我不知道该如何实施。此外,他们的解决方案也不可能是我的解决方案。

我尝试过的:

  1. 清理/清除数据
  2. 运行docker run -p 8080:3000/tcp -p 8080:3000/udp --name cabinfeverInstance -t something/cabinfever
  3. 未指定特定端口(8080(
  4. 指定0.0.0.0
  5. 其他几个想法

没有一个工作,我仍然得到了精彩的节点REPL。

如果有人有任何建议,我将不胜感激。

以下是相关文件:

index.js

var express = require('express');
var app     = express();
var port = 3000;
app.get('/', function(req,res) {
console.log(new Date().toLocaleString());
res.send(new Date().toLocaleString());
});
app.listen(port, () => {
console.log(`Listening at http://localhost: ${port}`);
});

package.json:

{
"name": "docnode",
"version": "1.0.0",
"description": "barebones node on docker",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"start": "index.js"
},
"author": "my.email.address@gmail.com",
"license": "MIT",
"dependencies": {
"express": "^4.15.5"
}
}

docker-compose.yml:

version: "3"
services:
node:
build: .
command: node index.js
ports:
- "3000:3000"

Dockerfile:

FROM node:slim
LABEL author="my.email.address@gmail.com"
WORKDIR /app
# copy code, install npm dependencies
COPY index.js /app/index.js
COPY package.json /app/package.json
RUN npm install

您应该指定在Dockerfile中运行的命令,而不是docker-compose.yml文件:

CMD ["node", "index.js"]

docker run图像时,它只考虑docker run命令行上的选项。docker run不知道docker-compose.yml,所以如果你在那里指定了command:之类的东西,它就不会被尊重。由于CMD不在Dockerfile中,也不在docker run命令行上(在映像名称之后(,因此可以返回到基本映像的CMD,在node的情况下,它将运行REPL。

通过此更改,您不需要覆盖docker-compose.yml文件中的command:,并且可以删除该行。运行

docker-compose up -d

将使用指定的选项启动docker-compose.yml文件中的容器(注意,ports:映射和docker run -p端口略有不同(。

相关内容

最新更新