{"id":21803235,"url":"https://github.com/litongjava/docker-enter","last_synced_at":"2026-04-15T18:02:34.367Z","repository":{"id":153190487,"uuid":"628453266","full_name":"litongjava/docker-enter","owner":"litongjava","description":"docker-enter","archived":false,"fork":false,"pushed_at":"2024-12-04T17:44:33.000Z","size":466,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-21T07:16:31.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/litongjava.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-16T01:46:02.000Z","updated_at":"2024-12-04T17:44:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"124b1b1e-418c-4da9-b32f-3192076a2614","html_url":"https://github.com/litongjava/docker-enter","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/litongjava/docker-enter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fdocker-enter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fdocker-enter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fdocker-enter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fdocker-enter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/litongjava","download_url":"https://codeload.github.com/litongjava/docker-enter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fdocker-enter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31853279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-27T11:40:47.067Z","updated_at":"2026-04-15T18:02:34.350Z","avatar_url":"https://github.com/litongjava.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# docker-enter\n\n`docker-enter` 是一组基于 Docker 的实用命令，旨在简化进入运行中的 Docker 容器的过程。通过这些命令，用户可以方便地访问容器内部，执行命令或进行调试操作。\n\n## 目录\n\n- [简介](#简介)\n- [安装](#安装)\n  - [下载](#下载)\n  - [解压](#解压)\n  - [添加执行权限](#添加执行权限)\n- [使用方法](#使用方法)\n  - [启动示例容器](#启动示例容器)\n  - [查看所有容器](#查看所有容器)\n  - [进入指定容器](#进入指定容器)\n- [详细说明](#详细说明)\n  - [关键命令解释](#关键命令解释)\n    - [`nsenter`](#nsenter)\n    - [`importenv`](#importenv)\n  - [`docker-enter` 脚本详解](#docker-enter-脚本详解)\n- [与其他进入容器方式的对比及优势](#与其他进入容器方式的对比及优势)\n  - [`docker exec`](#docker-exec)\n  - [`docker attach`](#docker-attach)\n  - [`nsenter`](#nsenter-1)\n  - [`docker-enter` 的优势](#docker-enter-的优势)\n- [总结](#总结)\n\n## 简介\n\n`docker-enter` 提供了一组命令，简化了进入运行中的 Docker 容器的过程。相比于传统方法，`docker-enter` 自动化了多个步骤，使用户能够更加高效、灵活地访问和管理 Docker 容器，特别适用于需要深入容器内部进行系统级调试和维护的场景。\n\n## 安装\n\n### 下载\n\n访问以下链接下载 `docker-enter` 工具包：\n\n```bash\nhttps://github.com/litongjava/docker-enter/releases/download/v1.0/docker-enter.zip\n```\n\n### 解压\n\n使用 `unzip` 命令将下载的压缩包解压到 `/bin` 目录：\n\n```bash\nsudo unzip docker-enter.zip -d /bin\n```\n\n解压过程中可能会提示是否替换已有文件，选择 `N`（否）以保留现有文件：\n\n```\nArchive:  docker-enter.zip\n  inflating: /bin/docker-ip\n extracting: /bin/docker-logpath\n extracting: /bin/docker-rmexited\n  inflating: /bin/docker-volume\n  inflating: /bin/get_docker-enter\n  inflating: /bin/importenv\nreplace /bin/nsenter? [y]es, [n]o, [A]ll, [N]one, [r]ename: N\n  inflating: /bin/docker-enter\n```\n\n### 添加执行权限\n\n为相关脚本添加执行权限：\n\n```bash\nsudo chmod u+x /bin/docker-enter\nsudo chmod u+x /bin/docker-ip\nsudo chmod u+x /bin/docker-logpath\nsudo chmod u+x /bin/docker-rmexited\nsudo chmod u+x /bin/docker-volume\nsudo chmod u+x /bin/importenv\nsudo chmod u+x /bin/nsenter\n```\n\n## 使用方法\n\n### 启动示例容器\n\n启动一个示例容器以测试 `docker-enter`：\n\n```bash\ndocker run --name nodejs16 --network=host -dit -v /data:/data node:16.16.0-slim\n```\n\n### 查看所有容器\n\n查看当前所有容器，确保目标容器正在运行：\n\n```bash\ndocker ps -a\n```\n\n### 进入指定容器\n\n使用 `docker-enter` 进入指定的容器：\n\n```bash\ndocker-enter nodejs16\n```\n\n## 详细说明\n\n### 关键命令解释\n\n#### `nsenter`\n\n`nsenter` 是一个强大的工具，用于进入 Linux 命名空间。它允许用户在不同的命名空间（如进程、网络、挂载等）中执行命令。通过 `nsenter`，用户可以直接访问和操作运行中的进程所在的环境，这在调试和维护容器时尤为有用。\n\n#### `importenv`\n\n`importenv` 是 `docker-enter` 工具中的一个脚本，用于将宿主机的环境变量导入到容器内部。它确保在进入容器时，能够继承宿主机的环境配置，保持一致性。这对于需要特定环境变量才能正常运行的应用程序来说非常重要。\n\n### `docker-enter` 脚本详解\n\n`docker-enter` 脚本的主要功能是简化用户进入 Docker 容器的过程。其工作原理包括：\n\n1. **获取容器的 PID**\n\n   通过 Docker API 或命令行工具获取指定容器的主进程 PID。\n\n2. **使用 `nsenter` 进入命名空间**\n\n   利用 `nsenter` 命令进入容器的进程、网络和挂载命名空间，提供一个与容器内部环境一致的 shell。\n\n3. **导入环境变量**\n\n   通过 `importenv` 脚本，将宿主机的环境变量传递给容器内部，确保环境的一致性。\n\n4. **执行交互式 Shell**\n\n   启动一个交互式的 shell（如 `bash` 或 `sh`），使用户能够直接在容器内部执行命令。\n\n整体而言，`docker-enter` 自动化了多个步骤，提供了一个一键式的解决方案，简化了手动使用 `docker exec` 或 `nsenter` 进行容器访问的复杂性。\n\n## 与其他进入容器方式的对比及优势\n\n### `docker exec`\n\n```bash\ndocker exec -it \u003ccontainer_name\u003e /bin/bash\n```\n\n**优点：**\n- 简单易用，直接集成在 Docker 命令中。\n\n**缺点：**\n- 需要容器内安装 `bash` 或其他 shell。\n- 在某些受限环境中，权限可能不足。\n\n### `docker attach`\n\n```bash\ndocker attach \u003ccontainer_name\u003e\n```\n\n**优点：**\n- 直接连接到容器的主进程。\n\n**缺点：**\n- 仅适用于附加到容器的主进程，交互性较差。\n- 容器退出后会断开连接。\n\n### `nsenter`\n\n直接使用 `nsenter` 进入容器命名空间。\n\n**优点：**\n- 强大的灵活性，能够进入多个命名空间。\n\n**缺点：**\n- 需要手动获取容器的 PID 和命名空间信息。\n- 操作复杂，容易出错。\n\n### `docker-enter` 的优势\n\n1. **简化操作流程**\n\n   `docker-enter` 将获取 PID、进入命名空间和导入环境变量等步骤自动化，用户只需输入一个命令即可完成，极大地简化了操作流程。\n\n2. **环境一致性**\n\n   通过 `importenv`，`docker-enter` 能够确保宿主机的环境变量被传递到容器内部，保持环境的一致性，减少配置错误的可能性。\n\n3. **增强的灵活性**\n\n   利用 `nsenter`，`docker-enter` 可以进入多个命名空间，提供更高的灵活性，适用于更复杂的调试和维护任务。\n\n4. **权限管理**\n\n   `docker-enter` 在需要时可以以更高的权限进入容器，适用于需要进行系统级别操作的场景。\n\n5. **减少依赖**\n\n   与 `docker exec` 不同，`docker-enter` 不依赖于容器内安装特定的 shell 工具（如 `bash`），这在某些精简型镜像中尤为重要。\n\n## 总结\n\n`docker-enter` 提供了一种更高效、灵活且可靠的方式来访问和管理 Docker 容器。通过自动化多个步骤，确保环境一致性，并提供增强的权限和灵活性，`docker-enter` 特别适用于需要深入容器内部进行系统级调试和维护的场景。与传统方法相比，`docker-enter` 减少了操作复杂性，提高了工作效率，是管理 Docker 容器的有力工具。\n\n# 许可\n\n本项目采用 [MIT 许可证](LICENSE)。\n\n# 联系方式\n\n如有任何问题或建议，请联系 [litongjava]。\n\n# 致谢\n\n感谢所有为 `docker-enter` 项目贡献代码和建议的开发者和用户。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitongjava%2Fdocker-enter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flitongjava%2Fdocker-enter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitongjava%2Fdocker-enter/lists"}