docker - Docker端口映射在Windows 10上不起作用

我是Docker的新手。我正在尝试让一个简单的节点应用程序在docker上运行。但是我在docker port publish方面遇到问题。

Docker version-18.03.0-ce,内部版本0520e24302

我的简单应用程序代码:

'use strict';

const express = require('express');

// Constants
const PORT = 8081;
const HOST = '0.0.0.0';

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

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

我的docker文件:
FROM node:carbon

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 8081

CMD [ "npm", "start" ]

My docker ps output-0.0.0.0:8080->8081/tcp,爱拥抱

Output from curl command from my local-无法连接到本地主机端口8080:连接被拒绝。

最佳答案

在Windows上,Linux容器是在Windows主机OS上运行的虚拟机内创建的。该虚拟机被分配了IP。进行 curl 时,应使用此IP而不是localhost。在这里,localhost表示Windows主机,而不是我们打算在端口8080上命中的虚拟机。

要知道分配给虚拟机的IP,请运行docker-machine ls命令。您将获得类似于以下内容的输出:

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce

注意上述命令输出中URL下的IP-在计算机上运行命令时它将是一个不同的IP。然后使用它进行 curl :
curl -i 192.168.99.100:8080

https://stackoverflow.com/questions/50890981/

相关文章:

python - GUI 卡住了其余的 python 代码

docker - 无法在 Dockerfile 中运行 sysctl 命令

opencv - 如何从opencv中的上下文获取设备列表

opencv - ANN-人工神经网络训练

python - 使用 slider 编辑颜色值

android - 如何使用静态OpenCV在Android中使用JavaCV的静态方法

docker - depends_on不等待docker-compose 1.22.0中的其他服务

opencv - 更改图像opencv的宽度步长

python - 质心计算程序中的时间滞后

python - 使用OpenCV计数视频中的帧…(Python)