我正在使用 Docker,遇到了一个问题,每当我尝试访问我的容器时,我都会收到一条“连接已重置”消息。我读过各种其他讨论使用bind选项的文章。但我发现更令人困惑的是,如果我遵循 docker 的“入门”教程,它就可以成功连接。
“入门”教程中的基本 Dockerfile 如下:
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
Run Code Online (Sandbox Code Playgroud)
它不使用EXPOSE任何地方来指定端口,但我通过查看src/index.js此信息知道侦听端口 3000
现在我的应用程序的 docker 文件如下所示:
FROM node:12-alpine
WORKDIR /hapi
COPY . .
RUN yarn install --production
CMD ["node", "server.js"]
Run Code Online (Sandbox Code Playgroud)
我的 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();
Run Code Online (Sandbox Code Playgroud)
如您所见,我的应用程序也设置为侦听端口 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 中添加一行,但这没有效果
| 归档时间: |
|
| 查看次数: |
4767 次 |
| 最近记录: |