我为 FastAPI 应用程序创建了一个 docker 映像,然后从该映像创建了一个容器。现在,当我通过终端使用
docker exec -it <container-id>
连接到该容器时,我可以访问它,但问题是当我按 TAB 时,自动完成功能不起作用。
从你的问题中我了解到的是,当你进入docker环境时,你无法自动完成文件名和文件夹。
通常当您通过 shell 进入容器时,自动完成功能无法正常工作。尝试使用 bash 环境进入容器,即
docker exec -it <container-id> bash
。现在您可以使用 TAB 自动补全文件和文件夹。
如果您执行
docker exec --help
,您将看到类似以下内容:
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Execute a command in a running container
因为确实,
docker exec
用于在正在运行的容器中执行命令。
现在,如果你在没有提供命令的情况下进入容器(只有
docker exec -it <container-id>
),则意味着相应容器的镜像已经配置了系统的默认shell,这很可能是/bin/sh
。如果它没有这个,那么当运行 docker exec -it <container-id>
(没有容器命令!)时,你会面临:
"docker exec" requires at least 2 arguments.
See 'docker exec --help'.
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
因为 docker 需要知道当你运行时要执行什么
docker exec
。
即使镜像配置了默认 shell,最好明确指示 docker 您要运行的命令。
docker exec -it <container-id> sh
和docker exec -it <container-id> bash
都会(应该!)工作,但是使用sh
你不会有自动完成功能,而使用bash
你会拥有它。