【问题标题】:Docker expose not workingDocker暴露不起作用
【发布时间】:2017-01-21 14:06:08
【问题描述】:

问题:

我使用 Docker 和 Aurelia 创建了一个简单的站点。该站点在 Docker 中运行,但无法从我的本地主机访问。我做了什么:


创建容器

docker build -t randy/node-web-app .

docker run -p 9000:9000 -d randy/node-web-app

97f57c3d0da5d03f53b4ba893fdb866ca528e10e6c4a1b310726e514d8957650

查看脚本是否运行:

docker logs 97f57c3d0da5

申请地址:http://localhost:9000

进入 docker 集装箱码头查看站点是否已启动:

docker exec -it 97f57c3d0da5 /bin/bash

查看是否运行:

curl -i localhost:9000

总结:

HTTP/1.1 200 正常

<!DOCTYPE html>

(我实际上看到了它应该返回的 HTML,但它太大了,无法在此处发布。)

返回主机终端:

exit

curl -i localhost:9000

curl: (7) 无法连接到 localhost 端口 9000:连接被拒绝

如何确保我可以从我的电脑访问该网站?在第一个命令中,我在 9000:9000 上设置了暴露,所以这应该不是问题。


Dockerfile:

FROM node:latest

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . /usr/src/app

RUN npm install -g aurelia-cli
RUN npm install

EXPOSE 9000
CMD ["npm", "start"]

【问题讨论】:

  • 您是否仅在 127.0.0.1 上收听? docker exec -it <container> netstat -an 应该输出 0.0.0.0:9000 而不是 127.0.0.1:9000

标签: node.js docker


【解决方案1】:

我在部署此映像的机器上使用 Kitematic 而不是普通版本的 Docker。 Kitematic 将 docker 映像映射到(内部)IP 地址,而不是主机的 localhost。

我的回答是使用192.168.1.67 作为IP 而不是127.0.0.1

如果您在没有 Kitematic 的情况下安装 Docker,这应该不是问题。

【讨论】: