我在使用Docker时遇到了一个问题,每当我尝试访问我的容器时,我都会收到一条“连接已重置”的消息。我读过其他各种关于使用
bind
选项。但我发现更令人困惑的是,如果我按照docker的“入门”教程进行操作,它就可以成功连接。
“入门”教程中的基本Dockerfile如下:
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
它不使用
EXPOSE
可以在任何地方指定端口,但我从内部了解到
src/index.js
这在端口3000上监听
现在,我的应用程序的docker文件如下:
FROM node:12-alpine
WORKDIR /hapi
COPY . .
RUN yarn install --production
CMD ["node", "server.js"]
我的server.js代码如下:(直接从他们的文档中提取)
'use strict';
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
method: 'GET',
path: '/',
handler: (request, h) => {
return 'Hello World!';
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
如您所见,我的应用程序也设置为监听端口3000。
当我运行我使用的“入门”容器时:
docker run -dp 3001:3000 getting-started
然后,我可以导航到localhost:3001并看到网站正在运行。
要运行我使用的“hapi”容器:
docker run -dp 3002:3000 --name hapi hapitest
在浏览器中导航到localhost:3002,我看到连接被重置的消息。
这两个容器都使用以下命令从各自的目录容器Dockerfile中成功构建:
docker build -t getting-started .
和
docker build -t hapitest .
此外,如果我在本地运行hapi应用程序,即只需转到命令行并键入
node server
我可以在localhost:3000上成功访问有问题的页面
我以前并没有真正使用过hapi,但鉴于我直接从文档中引用了这个例子,我并不这么认为
认为
这应该是问题所在,但我也是Docker的新手。但有人能解释一下吗,因为每个人看起来都一样,我正在拔头发。
我唯一的另一个想法是,这与我的
WORKDIR
指令,但据我所知,一切都是正确的,因为我的所有文件都位于同一位置,而入门文件位于“src”目录中,由其“src/index.js”引用
CMD
指令。
我甚至尝试添加一个
EXPOSE 3000
我的Dockerfile中有一行,但这没有任何效果