Docker Run 设置端口映射

在使用 Docker 运行容器时,有时我们需要将容器的端口映射到主机上的一个端口,以便与容器内的服务进行通信。Docker 提供了 -p--publish 参数来实现端口映射功能。本文将介绍如何使用 Docker Run 设置端口映射,并提供相应的代码示例。

端口映射概述

在 Docker 中,每个容器都有自己的网络命名空间,拥有独立的 IP 地址。默认情况下,容器内的服务只能通过容器之间的网络进行通信,无法直接与主机或其他容器外的服务进行通信。为了解决这个问题,Docker 提供了端口映射功能,将容器内的端口映射到主机上的一个端口,从而实现与容器内服务的通信。

Docker Run 设置端口映射

在使用 docker run 命令运行容器时,可以通过 -p--publish 参数设置端口映射。该参数的语法为:

-p <host-port>:<container-port>

其中 <host-port> 表示主机上的端口, <container-port> 表示容器内的端口。这个参数可以多次使用,设置多个端口映射。

下面是一个简单的示例,演示如何将容器内的 HTTP 服务(运行在 80 端口)映射到主机的 8080 端口:

docker run -p 8080:80 nginx

在上述命令中,-p 8080:80 参数表示将容器内的 80 端口映射到主机的 8080 端口。当容器启动后,我们可以通过 localhost:8080 访问容器内的 HTTP 服务。

代码示例

下面是一个 Node.js Express 应用的示例,演示如何使用 Docker Run 设置端口映射。假设我们有一个简单的 Express 应用,监听 3000 端口,并返回 "Hello, Docker!" 的文本响应。

首先,我们需要创建一个名为 app.js 的文件,内容如下:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello, Docker!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

然后,我们需要创建一个名为 Dockerfile 的文件,用于构建 Docker 镜像。内容如下:

FROM node:14

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "app.js" ]

接下来,我们可以使用以下命令构建并运行 Docker 容器:

docker build -t myapp .
docker run -p 8080:3000 myapp

在上述命令中,-t myapp 参数表示给构建的镜像指定一个标签为 myapp-p 8080:3000 参数表示将容器内的 3000 端口映射到主机的 8080 端口。

当容器启动后,我们可以通过 localhost:8080 访问应用并查看到 "Hello, Docker!" 的文本响应。

总结

通过 Docker Run 设置端口映射可以方便地将容器内的服务暴露给主机上的其他服务或用户。本文介绍了 Docker Run 设置端口映射的概念和用法,并提供了一个 Node.js Express 应用的示例。希望本文对您理解和使用 Docker Run 设置端口映射有所帮助。

附录:代码示例

app.js

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello, Docker!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

Dockerfile

FROM node:14

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .