代码之家  ›  专栏  ›  技术社区  ›  TommyBs

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

  •  0
  • TommyBs  · 技术社区  · 5 年前

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

    0 回复  |  直到 5 年前
        1
  •  0
  •   Yauhen    4 年前

    使用“0.0.0.0”而不是“localhost” host 财产。 这将允许Docker正确地公开端口。

    这也是 --host 旗帜为 Vite 用户

    推荐文章