从 docker 容器生成 docker-compose yaml 定义

经常使用docker,有的是用命令行形式,有的是docker-compose形式,用这个工具可以从容器生成yaml格式的定义。本文记录了用docker方式使用此工具。

项目地址:Red5d/docker-autocompose

可以通过克隆此存储库并构建映像或使用 GitHub 上自动生成的映像 ,从 Docker 容器使用此工具。

拉取镜像

docker pull ghcr.io/red5d/docker-autocompose:latest

使用方法

  • 使用新镜像从正在运行的容器或以空格分隔的容器名称或 ID 列表生成 docker-compose 文件:
    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose <container-name-or-id> <additional-names-or-ids>...

输出alist结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
root@onecloud:~# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose alist
services:
alist:
command:
- "/entrypoint.sh"
container_name: "alist"
environment:
- "PUID=0"
- "PGID=0"
- "UMASK=022"
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- "RUN_ARIA2=false"
hostname: "7d3b5dccfdba"
image: "xhofe/alist:latest"
ipc: "private"
labels:
MAINTAINER: "i@nn.ci"
org.opencontainers.image.created: "2025-03-27T15:49:55.334Z"
org.opencontainers.image.description: "\U0001F5C2️A file list/WebDAV program that supports multiple\
\ storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。"
org.opencontainers.image.licenses: "AGPL-3.0"
org.opencontainers.image.revision: "0cde4e73d614a4bf0b28872391a13d0f8a6d166a"
org.opencontainers.image.source: "https://github.com/AlistGo/alist"
org.opencontainers.image.title: "alist"
org.opencontainers.image.url: "https://github.com/AlistGo/alist"
org.opencontainers.image.version: "v3.44.0"
logging:
driver: "json-file"
options: {}
mac_address: "da:0c:77:9d:52:9d"
network_mode: "bridge"
ports:
- "5244:5244/tcp"
restart: "unless-stopped"
volumes:
- "/etc/alist:/opt/alist/data"
working_dir: "/opt/alist/"
version: "3.6"
  • 以 docker-compose 格式打印出所有容器:
    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose $(docker ps -aq)

网络上有一些docker cli和yaml相互转化的工具,但用过之后都不太理想,参数复杂的时候转化的结果都不能用。这个工具生成的内容比正常的yaml多。