Jie*_*Sun 8 docker docker-for-windows
我是码头工人的新手。我正在尝试在 docker 上运行一个简单的节点应用程序。但是,我面临着 docker 端口发布的问题。
Docker 版本- 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}`);
Run Code Online (Sandbox Code Playgroud)
我的码头文件:
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" ]
Run Code Online (Sandbox Code Playgroud)
我的docker ps 输出- 0.0.0.0:8080->8081/tcp,爱拥抱
我本地的 curl 命令的输出- 无法连接到本地主机端口 8080:连接被拒绝。
San*_*dev 10
在 Windows 上,Linux 容器是在运行在 Windows 主机操作系统上的虚拟机中创建的。该虚拟机被分配了一个 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
Run Code Online (Sandbox Code Playgroud)
请注意上面命令输出URL中的 IP -- 当您在计算机上运行命令时,它将是不同的 IP。然后用它来做卷曲:
curl -i 192.168.99.100:8080
Run Code Online (Sandbox Code Playgroud)
Gha*_*san 10
现在是 2020 年,docker 对这些命令的处理方式不同:
docker run -p 3000:80 my_image (正确的格式;端口选项必须在图像名称之前。)
docker run my_image -p 3000:80 (格式错误;docker 不会通知您,并且会静默地失败端口发布。)
希望这有助于某人(或我,下次我与 docker xD 一起工作时)
| 归档时间: |
|
| 查看次数: |
11430 次 |
| 最近记录: |