Docker 端口映射在 windows 10 上不起作用
Docker port mapping is not working on windows 10
我是 docker 的新手。我正在尝试在 docker 上获得一个简单的节点应用程序 运行。但是,我面临 docker 端口发布的问题。
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:连接被拒绝。
您的端口映射是 8080-8081,您正在尝试连接到 windows 机器上的 localhost:8080。
您需要进入 docker 容器并卷曲到 localhost:8081 或从您的 windows 机器卷曲到您的 hostname:8080。
您可以在 windows 运行
中获取您的主机名
hostname
curl your_hostname:8080
您可以使用其 ID 或名称(在您的图片上称为 loving_hugle)进入您的 docker 容器,然后卷曲到本地主机
docker exec -it loving_hugle bash
curl localhost:8081
在 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 -i 192.168.99.100:8080
现在是 2020 年,docker 对这些命令的处理方式不同:
docker run -p 3000:80 my_image
(格式正确;端口选项必须位于图像名称之前。)
docker run my_image -p 3000:80
(格式错误;docker 不会通知您,并且会默默地失败端口发布。)
希望这对某人(或我,下次我与 docker xD 合作)有所帮助
我是 docker 的新手。我正在尝试在 docker 上获得一个简单的节点应用程序 运行。但是,我面临 docker 端口发布的问题。
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:连接被拒绝。
您的端口映射是 8080-8081,您正在尝试连接到 windows 机器上的 localhost:8080。
您需要进入 docker 容器并卷曲到 localhost:8081 或从您的 windows 机器卷曲到您的 hostname:8080。
您可以在 windows 运行
中获取您的主机名hostname
curl your_hostname:8080
您可以使用其 ID 或名称(在您的图片上称为 loving_hugle)进入您的 docker 容器,然后卷曲到本地主机
docker exec -it loving_hugle bash
curl localhost:8081
在 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 -i 192.168.99.100:8080
现在是 2020 年,docker 对这些命令的处理方式不同:
docker run -p 3000:80 my_image
(格式正确;端口选项必须位于图像名称之前。)
docker run my_image -p 3000:80
(格式错误;docker 不会通知您,并且会默默地失败端口发布。)
希望这对某人(或我,下次我与 docker xD 合作)有所帮助