- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在 docker 容器内有一个简单的 hello world express.js 应用程序。它设置为在端口 8080 上运行,并且 docker 文件在镜像中公开了此端口。此外,我在运行镜像时发布了端口。然而,当我尝试发出简单的 curl 请求时,连接被拒绝。以下是我设置此测试的方式:
我的 Dockerfile 非常简单:
FROM node
ADD ./src /src
WORKDIR /src
# install your application's dependencies
RUN npm install
# replace this with your application's default port
EXPOSE 8080
# replace this with your main "server" script file
CMD [ "node", "server.js" ]
在我的 ./src 目录中,我有一个 server.js 文件,如下所示:
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);
});
还有一个基本的 package.json,如下所示:
{
"name": "hello-world",
"description": "hello world test app",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "4.7.2"
}
}
图像构建得很好:
→ docker build -t jimjeffers/hello-world .
Sending build context to Docker daemon 1.126 MB
Sending build context to Docker daemon
Step 0 : FROM node
---> 6a8a9894567d
Step 1 : ADD ./src /src
---> 753466503fbf
Removing intermediate container 135dab70dfff
Step 2 : WORKDIR /src
---> Running in 12257ff3f990
---> 010ce4140cdc
Removing intermediate container 12257ff3f990
Step 3 : RUN npm install
---> Running in 1a9a0eb9d188
---> 5dc97c79281e
Removing intermediate container 1a9a0eb9d188
Step 4 : EXPOSE 8080
---> Running in abbaadf8709d
---> 9ed540098ed2
Removing intermediate container abbaadf8709d
Step 5 : CMD [ "node", "server.js" ]
---> Running in 63b14b5581cd
---> eababd51b50e
Removing intermediate container 63b14b5581cd
Successfully built eababd51b50e
开始就好了:
→ docker run -P -d jimjeffers/hello-world
ee5024d16a679c10131d23c1c336c163e9a6f4c4ebed94ad4d2a5a66a64bde1d
→ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee5024d16a67 jimjeffers/hello-world:latest node server.js About an hour ago Up 11 seconds 0.0.0.0:49158->8080/tcp jovial_engelbart
5d43b2dee28d mongo:2.6 /usr/src/mongo/docke 5 hours ago Up 3 hours 27017/tcp some-mongo
我可以确认服务器正在容器内运行:
→ docker logs ee5024d16a67
Listening on port 8080
但如果我尝试发出请求,连接将被拒绝。
→ curl -i 0.0.0.0:49158
curl: (7) Failed connect to 0.0.0.0:49158; Connection refused
这里有什么我遗漏的吗?如果我在不使用 docker 的情况下运行应用程序,它会按预期工作:
→ node src/server.js
Listening on port 8080
→ curl -i 0.0.0.0:8080
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-1243066710"
Date: Mon, 04 Aug 2014 05:11:58 GMT
Connection: keep-alive
Hello World
最佳答案
我发现了困惑的根源。我的机器在 Mac OSX 上运行,因此我使用 boot2docker 安装了 docker .
所以再次重复这个过程:
→ docker run -P -d jimjeffers/hello-world
28431b32b93dbecaa2a8a5b129cbd36eebe8a90f4c20ab10735455d82fa9de37
→ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28431b32b93d jimjeffers/hello-world:latest node server.js 2 hours ago Up 9 minutes 0.0.0.0:49159->8080/tcp stoic_franklin
5d43b2dee28d mongo:2.6 /usr/src/mongo/docke 6 hours ago Up 4 hours 27017/tcp some-mongo
最后,诀窍不是连接到我自己的机器,而是从 VM 的 IP 地址 curl:
→ boot2docker ip
The VM's Host only interface IP address is: 192.168.59.103
所以我在 curl 虚拟机时终于取得了成功:
→ curl -i 192.168.59.103:49159
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-1243066710"
Date: Mon, 04 Aug 2014 04:32:37 GMT
Connection: keep-alive
这在 Docker 的 installation guide 上都有详细解释。但我错过了它,因为它在文档的末尾。
关于javascript - Docker - 为什么这个 express.js 容器带有暴露/发布的端口拒绝连接? (使用 boot2docker),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25112200/
我们正在使用 VSTS 构建和发布通过 Xamarin 创建的 iOS 和 Android 应用程序。通过 VSTS 将 Android 应用发布到商店相对简单。有人可以指导我或提供一些如何通过 VS
我一直在研究 Spring Social Facebook 的 publish(objectId, connectionName, data) API ,但不确定此 API 的用法(遗憾的是,由于缺少
我正在使用 django viewflow 创建一个发布流程: 用户创建对象 它进入审核流程,其状态为待处理(公众不可见) 经过审核和批准后,就会发布并公开可见。 如果用户编辑同一实体,则会再次进入审
我正在尝试进行 API 调用,并且 API 需要格式为 XML: Security GetSessionInfo 999999999999 0 2 {
我已经查看了所有 StackOverflow,但没有找到适合我的案例的解决方案我有 405 HttpStatusCode 调用 API/Regions/Create 操作这是我的 baseContro
如果我切换到新版本的SpringBoot,我在启动应用程序时会得到上面的错误信息。这是为什么? 最美好的祝愿史蒂文 pom.xml 4.0.0 de.xyz.microservice spring
我有一个场景,页面导航是从一个域到另一个域完成的。例如,导航是从 http://www.foo.com到 http://www.bar.com在 JavaScript 中单击按钮 重定向时,我需要将用
这半年来一直深耕包头,这个城市比较不错,但是推进项目的难度确实挺大的。与开发产品相比,后者更省心。但是光研发产品,没有项目
我正在阅读有关 Github 版本 的信息,它似乎很适合您的项目。因为我们需要决定将哪些功能用于生产,哪些不用于。 我无法理解的部分是,master 和 release 分支如何在其中发挥作用。 Sh
我将一些代码推送到远程存储库,然后在 GitHub 上创建了第一个版本,并将其命名为 'v0.0.1'。 GitHub 现在显示我现在有一个版本,并且还在“标签”中显示我有一个标签 “v0.0.1”。
如果我有一个具有以下文件/文件夹结构的 GitHub 存储库 github.com/@product/template: /build /fileA /fileB /src /genera
我有一个 Maven 多模块项目。 当代码开发完成后,我们想在 Jenkins 中编写一个分支构建作业,它分支代码,增加主干中的 pom 版本,并删除 -SNAPSHOT 来自分支中的 pom 版本。
我有一个非常大的集合(约 40000 个文档,包含约 20-25 个字段,包括包含一组约 500 个项目的数组字段)和约 2000 个订阅者(他们现在只是机器人)。 因此,当用户订阅整个集合(不包括服
如果我正在使用消息队列构建一个包含数十个发布者/订阅者的系统,那么我似乎有一些网络配置选项: 我可以拥有一个所有机器都使用的集群代理 - 每台机器都没有本地队列 我可以在每台机器上本地安装代理,并使用
我正在使用 Flash Develop,并且创建了一个 ActionScript 3.0 项目。它启动并读取一个 xml 文件,其中包含图像的 url。我已将 url 保留在与 swf 相同的文件夹中
如果我在一个句子中使用 alloc 和 retain 声明一个 NSArray 那么我应该释放 NSArray 对象两次(即[arrayObject release] 2次)? 最佳答案 如果您在同一
我正在尝试在 Node 中实现发布/订阅模式,但不使用 Redis。功能应该是相同的;您可以发布到 channel ,订阅 channel 并收听数据(如果您已订阅);以下是 Redis 功能: pu
编辑:这个问题、一些答案和一些评论,包含很多错误信息。见 how Meteor collections, publications and subscriptions work准确理解发布和订阅同一服
我正在开发一款 DirectX 游戏,我发现在发布版本中我的平均帧速率为 170fps,但是在调试版本中我的帧速率约为 20fps。 我想知道发布和调试版本之间的巨大差异是否正常,特别是因为在调试中我
是否有办法回滚 Windows Azure 网站和 SQL 部署/发布? 我发布了一个网站,现在它导致了很多错误,我想回到之前的状态并进一步处理代码。 这可能吗? 最佳答案 如果您使用 Git 或 T
我是一名优秀的程序员,十分优秀!