Docker 运行 - 页面加载时连接被重置

Tom*_*yBs 4 docker

我正在使用 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 中添加一行,但这没有效果

Yau*_*hen 5

使用“0.0.0.0”而不是“localhost”作为host属性。这将允许 Docker 正确公开端口。

这也是Vite用户--host的标志