Docker端口映射无法在Windows 10

时间:2018-06-16 19:17:19

标签: docker docker-for-windows

我是码头工人的新手。我想在docker上运行一个简单的节点应用程序。但是我遇到了docker端口发布的问题。

Docker version - 18.03.0-ce,build 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}`);

我的码头文件:

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,lovely hugle

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

3 个答案:

答案 0 :(得分:7)

现在是2020年,Docker对这些命令的处理方式有所不同:

docker run -p 3000:80 my_image(正确格式;端口名称必须在映像名称之前。)

docker run my_image -p 3000:80(格式错误;泊坞窗不会通知您,并且将默默地阻止端口发布。)

希望这会对某人(或我下次使用docker xD的工作)有所帮助

答案 1 :(得分:4)

在Windows上,Linux容器是在Windows主机操作系统上运行的虚拟机内创建的。为此虚拟机分配IP。在进行卷曲时,您应该使用此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 -i 192.168.99.100:8080

答案 2 :(得分:0)

您的端口映射是8080-8081,并且您正在尝试连接到Windows机器上的localhost:8080。

你需要进入你的docker容器并卷曲到localhost:8081或从你的windows机器卷曲到你的主机名:8080。

您可以在运行的Windows中获取主机名

['7.6', '7.8', '7.0', '8.2'...]

您可以使用其ID或名称(在您的图片上称为loving_hugle)进入您的docker容器,然后卷曲到localhost

hostname
curl your_hostname:8080