我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
当前回答
Use:
docker attach <container name/id here>
另一种方法(尽管有危险)是使用attach,但如果按Ctrl+C退出会话,也会停止容器。如果您只是想看看发生了什么,请使用docker-logs-f。
:~$ docker attach --help
Usage: docker attach [OPTIONS] CONTAINER
Attach to a running container
Options:
--detach-keys string Override the key sequence for detaching a container
--help Print usage
--no-stdin Do not attach STDIN
--sig-proxy Proxy all received signals to the process (default true)
其他回答
要执行到名为test的正在运行的容器中,下面是以下命令
如果容器具有bash shell
docker exec -it test /bin/bash
如果容器有伯恩外壳,大多数情况下都有
docker run -it test /bin/sh
很简单!
列出所有Docker图像:
sudo docker images
在我的系统上,它显示了以下输出:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
bash latest 922b9cc3ea5e 9 hours ago
14.03 MB
ubuntu latest 7feff7652c69 5 weeks ago 81.15 MB
我的电脑上有两个Docker映像。假设我想运行第一个。
sudo docker run -i -t ubuntu:latest /bin/bash
这将为您提供容器的终端控制。现在,您可以在容器内执行所有类型的shell操作。像这样ls将输出文件系统根目录中的所有文件夹。
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
这对我来说效果最好,因为如果使用它,我真的不必在docker构建中添加入口点。。
sudo docker运行-it--entrypoint/bin/bash<container_name>
Use:
docker attach <container name/id here>
另一种方法(尽管有危险)是使用attach,但如果按Ctrl+C退出会话,也会停止容器。如果您只是想看看发生了什么,请使用docker-logs-f。
:~$ docker attach --help
Usage: docker attach [OPTIONS] CONTAINER
Attach to a running container
Options:
--detach-keys string Override the key sequence for detaching a container
--help Print usage
--no-stdin Do not attach STDIN
--sig-proxy Proxy all received signals to the process (default true)
docker-attach将允许您连接到docker容器,但这实际上与ssh不同。例如,如果您的容器正在运行web服务器,docker附件可能会将您连接到web服务器进程的stdout。它不一定会给你一个外壳。
docker exec命令可能就是您所要的;这将允许您在现有容器中运行任意命令。例如:
docker exec -it <mycontainer> bash
当然,您正在运行的任何命令都必须存在于容器文件系统中。
在上面的命令中,<mycontainer>是目标容器的名称或ID。你是否使用docker compose并不重要;只需运行docker ps并使用ID(显示在第一列中的十六进制字符串)或名称(显示在最后一列中)。例如,给定:
$ docker ps
d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
我可以跑:
$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:3/64 scope link
valid_lft forever preferred_lft forever
我可以通过跑步来完成同样的事情:
$ docker exec -it d2d4a89aaee9 ip addr
类似地,我可以在容器中启动一个shell;
$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$