我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
当前回答
根据目标,至少有2个选项。
选项1:创建一个新的bash进程并加入其中(更简单)
示例开始:docker exec-it<containername>/bin/bash退出:键入退出专业版:适用于所有容器(不取决于CMD/Entrypoint)Contra:创建具有自己会话和环境变量的新进程
选项2:连接到已经运行的bash(更好)
示例开始:docker attach--detach keys ctrl-d<containername>退出:使用ctrl和d键Pro:加入容器中完全相同的运行bash。您具有相同的会话和相同的环境变量。Contra:仅当CMD/Entrypoint是一个交互式bash,如CMD[“/bin/bash”]或CMD[“/bin/bash”,“--init file”,“myfile.sh”],并且容器已使用docker run-itd<image>(-i=interactive,-t=tty和-d=deamon[opt])等交互式选项启动时才有效
我们发现选项2更有用。例如,我们将apache2前景更改为普通背景apache2,然后启动bash。
其他回答
有两个选项,我们可以使用这些方法shell和bash直接连接到docker终端,但通常不支持bash,而支持defalt sh要进入正在运行的容器,请键入以下内容:
docker exec-it container_name/container_ID sh
要猛击正在运行的容器,请键入以下命令:
docker exec-it container_name/container_ID bash
您只想使用bash终端,而不想在Dockerfile中安装bash终端(如RUNaptinstallbash-y)
您可以通过传递选项-ti与docker容器中的终端交互
docker run --rm -ti <image-name>
eg: docker run --rm -ti ubuntu
-t代表终端-i代表交互式
在某些情况下,您的图像可以是基于阿尔卑斯山的。在这种情况下,它将抛出:
OCI运行时执行失败:执行失败:container_linux.go:348:启动容器进程导致“exec:\”bash\“:在中找不到可执行文件$PATH“:未知
因为/bin/bash不存在。相反,您应该使用:
docker exec -it 9f7d99aa6625 ash
or
docker exec -it 9f7d99aa6625 sh
我创建了一个终端功能,以便更方便地访问容器的终端。也许这对你们也有用:
结果是,不用键入:
docker exec -it [container_id] /bin/bash
你会写:
dbash [container_id]
将以下内容放入~/.bash_profile(或其他适合您的文件),然后打开一个新的终端窗口并享受快捷方式:
#usage: dbash [container_id]
dbash() {
docker exec -it "$1" /bin/bash
}
易于理解的
docker exec -it <container_id> bash
在上面-它意味着交互式终端。
此外,图像名称:
docker exec -it <REPOSITORY name> bash