> ## Documentation Index
> Fetch the complete documentation index at: https://openidea.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker 与服务

> 在服务工具窗口中管理运行配置、Docker 容器、镜像和 Compose 项目，并通过 SFTP 部署文件。

**服务** 工具窗口（`⌘8` / `Alt+8`）集中展示正在运行或可以运行的东西：运行配置、Docker 连接和镜像注册表。HTTP 客户端和数据库查询结果在用过之后也会作为额外的标签页出现在这里（见 [HTTP 客户端](https://openidea.sh/zh/guide/http-client.md) 和 [数据库](https://openidea.sh/zh/guide/database.md)）。

## 服务工具窗口

左侧是树，右侧显示所选项的详情（控制台、日志、仪表盘等）。工具栏有 **+**（**添加服务**，树获得焦点时按 `⌘N` / `Alt+Insert`）、**全部展开**、**全部折叠**、**视图选项**，以及所选项可用的操作。可以同时选中多行批量执行，此时只显示它们共有的操作。

**添加服务**（**+** 按钮，或在空白处右键）提供：

* **运行配置类型**：为该类型的运行配置添加一个分组。
* **Docker 注册表…**
* **Docker 连接…**

### 运行配置

Spring Boot 配置默认就会显示。其他类型在通过 **添加服务 › 运行配置类型** 添加后，或者该类型的配置运行过一次后出现。每种类型一个分组。

* 分组操作：**全部运行**、**全部重启**、**全部停止**、**在浏览器中打开**。
* 配置操作：**运行**（或 **重新运行**）、**调试**、**停止**、**在浏览器中打开**、**更新应用**（仅支持的配置）。
* 右键菜单：**在运行工具窗口中显示**、**在调试工具窗口中显示**、**编辑配置…**、**从服务中移除**。

运行过的配置会在详情区显示其控制台。在同一分组内可以拖动或用 **上移** / **下移** 调整顺序，顺序按项目保存。

## Docker

OpenIDEA 通过 `docker` 命令行操作 Docker，所以只要能提供可用的 `docker` 命令即可：Docker Desktop、OrbStack、Colima、Rancher Desktop 或者原生 Docker Engine 都行。它会在 `OPENIDEA_DOCKER`、`PATH` 以及这些工具的常见安装目录中查找 `docker`。

### 连接

什么都不配置时，服务中会有一个名为 **Docker** 的连接，使用 Docker CLI 默认设置（`DOCKER_HOST` 或当前上下文）。要添加其他连接，选择 **添加服务 › Docker 连接…**：

| 字段 | 说明 |
| - | - |
| **名称:** | 树中显示的名称。 |
| **连接 Docker 守护进程的方式：** | **Docker CLI 默认值（DOCKER\_HOST/当前上下文）**；**Unix 套接字**（套接字路径，或 `npipe://` 这类 Engine API URL）；**TCP/SSH 主机**（`tcp://host:2376` 或 `ssh://user@host`，可选一个包含 `ca.pem`、`cert.pem`、`key.pem` 的 TLS 证书文件夹）；**Docker 上下文**（上下文名称，例如 `desktop-linux`、`orbstack`、`colima`）。 |

右键连接可以 **编辑连接…** 或 **移除连接**。连接是全局的，不属于某个项目。树通过 `docker events` 实时更新；守护进程未运行时，每 10 秒重试一次。

### 镜像注册表

**添加服务 › Docker 注册表…** 用于保存注册表凭据（**地址：** 如 `docker.io`、`ghcr.io`、`registry.example.com:5000`，**用户名：**，**密码：**）。可以在对话框里点 **测试连接**，或在注册表节点上用 **测试登录**。从该注册表拉取镜像时，OpenIDEA 会在临时的 Docker 配置中用这些凭据登录，不会改动你自己的 `~/.docker/config.json`。

### 树中的内容

每个连接下面：

* 先是 Compose 项目（`Docker-compose: <项目名>`，显示正在运行的服务数），然后是 **开发容器**、**容器**、**镜像**、**网络**、**卷** 分组。
* **视图选项** 可以显示或隐藏 **已停止的容器** 和 **未标记的镜像**（默认都显示）。

| 节点 | 右键菜单 |
| - | - |
| 容器 | **启动**、**停止**、**重启**、**暂停** / **取消暂停**、**仪表盘**、**显示日志**、**在编辑器中打开日志**、**显示进程**、**检查**、**创建终端**、**复制容器 ID**、**复制镜像名称**、**删除…** |
| Compose 项目 | **启动**、**停止**、**重启**、**Compose 停止 (down)** |
| 镜像 | **仪表盘**、**显示镜像层**、**检查**、**重新拉取**、**复制镜像 ID**、**删除…** |
| 卷、网络 | **仪表盘**、**检查**、**删除…** |
| 连接 | **刷新**、**拉取镜像…**、**视图选项**、**清理** |

**创建终端** 会在运行中的容器里打开一个[终端](https://openidea.sh/zh/guide/terminal.md)标签页（有 `bash` 用 `bash`，否则用 `sh`）。

**清理** 在确认后删除 **已停止的容器**、**悬空镜像**、**未使用的镜像**、**未使用的卷**、**未使用的网络** 或 **所有未使用的对象（系统清理）**。每个分组节点也有各自的清理项。

耗时操作（拉取、清理、Compose）会在顶部显示进度和 **取消** 按钮。同一时间只能运行一个 Docker 操作。

### 详情

选中某项后，详情区会显示以下标签页：

* **容器**：**仪表盘**（概览、实时资源使用情况、可在浏览器中打开的端口绑定、挂载、网络、环境变量、标签）、**日志**（最近 1,000 行，容器运行时持续跟随，可切换 **时间戳**）、**进程**（`docker top`）和 **检查**（原始 JSON）。
* **镜像**：**仪表盘**（标签、使用它的容器、环境变量、标签）、**镜像层** 和 **检查**。
* **卷** 和 **网络**：**仪表盘** 和 **检查**。

**在编辑器中打开日志** 会在编辑器标签页中打开日志，提供 **时间戳**、**软换行**、**在日志中查找** 和 **清除**。

## Dockerfile 与 Compose 文件

OpenIDEA 能识别 `Dockerfile`、`Containerfile`、`Dockerfile.<名称>`、`*.dockerfile`、`*.containerfile`，以及 Compose 文件（文件名包含 `compose` 的 YAML，或者内容看起来像 Compose 的 YAML）。按内容识别出的文件顶部会有横幅，可以选择 **不是 Compose 文件** 或 **保留为 Docker Compose**。

边栏中会显示运行图标：

* Dockerfile 的 `FROM` 行：最终阶段提供 **Run '…'**（先构建再运行）和 **构建镜像 '…'**，命名的中间阶段提供 **Build Stage '…'**。
* Compose 文件：`services:` 行提供 **Compose Up (All Services)**，每个服务行提供 **Compose Up '…'**。
* **修改运行配置…** 打开生成的配置，方便保存和修改。

镜像标签由文件夹名推导（`My App` 变成 `my-app:latest`）。边栏运行使用第一个 Docker 连接。**Compose 启动** 操作则按光标位置做同样的事。

## Docker 运行配置

**运行 › 编辑配置…** 中有一个 **Docker** 分组，包含三种类型。每种都有一个 **服务器** 字段，用来选择 Docker 连接。输出显示在运行工具窗口中。

> [accordion] Dockerfile
>
> 构建镜像；勾选 **运行构建的镜像** 时再用它启动容器。
>
> **Dockerfile**（相对于项目根目录）、**上下文文件夹**、**镜像标签**、**构建阶段**、**构建实参**（`KEY=value; OTHER=value`）、**构建选项**（例如 `--no-cache --platform linux/amd64`）、**运行构建的镜像**、**命令**，以及下面的容器字段。

> [accordion] Docker 镜像
>
> 用镜像启动容器：**镜像 ID 或名称**、**运行前拉取镜像**、**命令**，以及下面的容器字段。

> [accordion] Docker Compose
>
> 启动 Compose 服务：**Compose 文件**（用 `;` 分隔）、**Services**（留空表示全部）、**项目名称**、**在后台运行 (-d)**、**启动前构建镜像 (--build)**、**Up 选项**。停止前台运行时会执行 `docker compose down`。

容器字段：**容器名称**、**绑定端口**（`8080:80, 5005:5005`）、**绑定挂载**（`./data:/data; cache:/root/.cache`）、**容器环境**、**运行选项**（例如 `--rm --network host`）。每次运行前会删除同名的旧容器；**停止** 执行 `docker stop`。

## 部署（SFTP）

部署功能把项目文件复制到服务器，或者复制到本地/挂载的文件夹。在 **设置 › 构建、执行、部署 › 部署** 中配置；相关操作位于 **工具 › 部署**，以及项目视图、编辑器和编辑器标签页右键菜单中的 **部署** 子菜单。

### 配置服务器

**1. 创建 SSH 配置**

SFTP 服务器通过 **设置 › 工具 › SSH 配置** 中的 SSH 配置连接（主机、端口、用户，以及密码、密钥对或 OpenSSH
配置加认证代理）。见 [SSH](https://openidea.sh/zh/guide/remote/ssh.md)。

**2. 添加服务器**

在 **部署** 页面点击 **添加**。在 **连接** 标签页设置 **名称**、**类型**（**SFTP 文件传输** 或
**本地或挂载的文件夹**）、**SSH 配置**、**根路径**，以及可选的 **Web 服务器 URL**。点击 **测试连接** 检查。

**3. 设置映射**

在 **映射** 标签页，把 **本地路径**（相对于项目根目录，留空表示整个项目）和 **部署路径**（相对于根路径）以及可选的
**Web 路径** 对应起来。在 **排除的路径** 中列出永远不处理的远程路径。

**4. 设为默认**

选中服务器后点击 **设为默认**。“默认服务器”相关的操作和自动上传都使用它。

部署下的 **选项** 页面：

| 选项 | 默认值 |
| - | - |
| **按名称排除项目** | `.git;.svn;.hg;.idea;.openidea;.DS_Store;*.pyc;__pycache__` |
| **自动将更改的文件上传到默认服务器** | **从不**（可选 **显式保存时**、**始终**） |
| **删除本地文件时删除远程文件** | 关 |
| **保留文件时间戳** | 开 |

自动上传只在受信任的项目中进行。自动传输失败时会提示，成功时不打扰。

### 传输文件

这些操作作用于项目视图中选中的内容，或当前编辑器中的文件：

* **上传到默认服务器**、**上传到…**、**从默认服务器下载**、**下载自…**
* **与已部署的同步…**：打开比较窗口，列出仅本地存在、仅远程存在、某一侧更新、内容不同或完全相同的文件。可以按 **大小和时间戳** 或 **二进制内容** 比较，逐个文件选择操作（上传、下载、删除、跳过；按 `Space` 切换），预览并编辑差异，然后 **同步所选文件** 或 **同步全部**。
* **从服务器删除**
* **自动上传**：开启（始终）或关闭自动上传。
* **在浏览器中打开（已部署）**：在 Web 服务器上打开文件对应的 URL。
* **浏览远程主机**：打开 **远程主机** 工具窗口，以树的形式浏览服务器文件，支持 **打开**（编辑本地副本，保存时自动上传回去）、**下载到项目**、**新建文件夹…**、**重命名…**、**删除…**、**刷新** 和 **复制路径**。

遇到未知的主机密钥时会先让你确认；SSH 配置没有保存密码时，OpenIDEA 会询问密码或密钥口令。

## 暂不支持

* Kubernetes，以及 Podman 专属功能。
* 创建卷或网络、浏览容器内的文件、推送镜像。
* FTP、FTPS 和 WebDAV 部署服务器（只支持 SFTP 和本地文件夹）。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.