我正在使用docker:dind
创建一些图像。它工作得很好。当我执行docker:dind
容器并执行docker images
或docker ps
时,我可以分别看到图像和容器。
但是如果不总是在docker:dind
容器中执行,我如何从外部列出图像和容器呢?
(我知道这是可能的,因为我曾经读过一篇关于这方面的文章。但我好像找不到那篇好文章。)
发布于 2021-01-29 04:19:13
Docker插座
Docker使用unix(大多数情况下)套接字与其守护进程通信,因此您需要将此套接字文件挂载到运行的容器中。
Docker套接字通常在/var/run/docker.sock
中
如果Docker在VM上运行,docker中的docker可能会很难处理。
Docker中的docker
让我们来做一些简单的例子。
1.拉取docker镜像
$ docker pull docker:latest
2.在dockder中启动docker
首先,您需要找到您的unix套接字,并使用-v
标志将其挂载到docker容器中。Docker将在执行完传递的命令后执行。那么让我们为1 hour
执行sleep
$ docker run -v /var/run/docker.sock:/var/run/docker.sock -d docker:latest sleep 3600
52201aaa3e6ebaaafab0a7323fd621f9f41765bad6363bf4eae43bf06c5825ee
3.让我们shell到启动的容器中
我们可以使用带有-ti
标志的exec
命令
$ docker exec -ti 52201aaa3e6ebaaafab0a7323fd621f9f41765bad6363bf4eae43bf06c5825ee sh
/ #
4.尝试从docker容器启动MySQL
/ # docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.32-1debian10 started.
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.32-1debian10 started.
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Initializing database files
...
...
...
2021-01-28T20:17:33.146086Z 0 [Note] Server socket created on IP: '::'.
2021-01-28T20:17:33.147569Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2021-01-28T20:17:33.156949Z 0 [Note] Event Scheduler: Loaded 0 events
2021-01-28T20:17:33.157405Z 0 [Note] mysqld: ready for connections.
Version: '5.7.32' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
5.验证它是否正常工作
让我们在主机上打开另一个终端选项卡,并验证启动的容器是否正常工作
$ docker ps | grep mysql:5.7
bc90ce617ee4 mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp trusting_neumann
这就是全部了。您正在Docker中运行Docker。
另一台主机上的Docker
您还可以在您的计算机上启动docker容器,并且可以在另一台计算机上控制Docker。要求是,远程计算机上docker具有侦听TCP套接字的套接字,且允许您与该端点通信。当你在虚拟机中使用docker时,这是控制docker的常用方法,你可以在你本地的笔记本电脑上,你可以在服务器机房的一些服务器上进行开发。
要阅读更多内容,您可以查看如何设置docker守护进程监听TCP套接字,以及如何连接到the official docker documentation中的远程套接字
https://stackoverflow.com/questions/65944322
复制相似问题