【问题标题】:Application not loading on host port - Docker应用程序未在主机端口上加载 - Docker
【发布时间】:2019-09-25 01:38:21
【问题描述】:

Docker 服务无法在暴露的端口上加载

我创建了一个简单的DOCKERFILE 并在 docker swarm 中从它构建了图像“sample-image”,但是每当我尝试通过创建 docker 服务并将其暴露在相应的端口上来运行容器时,但它无法在我的浏览器上加载。请帮忙

首先我初始化了 docker swarm 并从 dockerfile 创建了一个图像“sample-image”,然后我在 swarm 内部创建了覆盖网络“sample-network”并创建了一个服务来在其上运行容器 "docker service create --name sample-service -p 8010:8001 --network sample-network sample-image"。服务已创建,但无法在浏览器上加载,因为我也为端口 8010 启用了我的 ufw。

DOCKERFILE:

FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8001
CMD [ "npm", "start" ]

server.js:

'use strict';

const express = require('express');
const PORT = 8001;
const HOST = '0.0.0.0';
const app = express();

app.get('/', (req, res) => {
  res.send('Hello world\n');
});

app.listen(PORT, HOST);

console.log(`Running on http://${HOST}:${PORT}`);

我希望我的网络浏览器在暴露的端口号上显示“Hello world”。

【问题讨论】:

    标签: docker docker-swarm docker-container docker-image


    【解决方案1】:

    你检查过 docker 日志吗?那应该告诉你出了什么问题。

    $ docker logs <containerid>
    

    【讨论】:

    • 是的!我已经检查了日志,我想这很好。请看下面 docker 日志显示的内容: > docker_web_app@1.0.0 start /usr/src/app > node server.js Running on 0.0.0.0:8001
    • 尝试更改主机,尝试 docker 内部默认网关通常为 172.17.0.1,但您可以检查网络,docker 检查网络桥,然后检查网关的值..
    • 哦,好吧..然后请尝试进入您的容器并查看应用程序是否有效.. docker exec -it /bin/bash curl -i localhost:8010
    • @JoaquinJavi 检查网络后,网关的值似乎是“网关”:“10.0.0.1”,所以我们可以修改网关以获得适当的结果。
    • @JoaquinJavi 该技巧有效,使用默认网关 172.17.0.1,这就是必需的。非常感谢。
    【解决方案2】:

    您可以尝试“curl -v http://127.0.0.1:8081”并将输出粘贴到这里吗?还有,你是不是在服务或者dockerd启动后才操作ufw?

    【讨论】:

    • curl -v 127.0.0.1:8081 * 将 URL 重建为:127.0.0.1:8081 * 正在尝试 127.0.0.1... * TCP_NODELAY 设置 * 连接到 127.0.0.1 端口 8081 失败:连接被拒绝 * 连接失败127.0.0.1 端口 8081:连接被拒绝 * 正在关闭连接 0 curl:(7)无法连接到 127.0.0.1 端口 8081:连接被拒绝
    • 嘿,我猜这是真正的问题,当我检查暴露的端口 8001 时,它还显示“curl: (7) 无法连接到 127.0.0.1 端口 8001:连接被拒绝”你能帮我吗解决这个问题?
    • 对不起,我的意思是“curl -v 127.0.0.1:8010”。你也可以做一个 docker service ls,以确保端口实际上是打开的。
    • 谢谢弗兰克的正确建议,我已经解决了,干杯:)
    【解决方案3】:

    我觉得你在docker里面的监听端口是8010,docker外面是8001,你可以试试改-p 8001:8001吗?如果可行,请尝试-p 8001:8010

    【讨论】:

    • Port1 是服务对外暴露的地方,Port2 是服务运行的端口。我已经通过进行这些更改进行了检查,但它仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多