docker-compose常用命令详解

本文全面介绍了 Docker Compose 的各项命令及其选项,包括构建、运行、停止、重启服务容器,以及查看和管理容器、网络、卷和镜像。通过详细解析,帮助读者掌握 Docker Compose 的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

build

docker-compose build [options] [–build-arg key=val…] [SERVICE…]
构建(重新构建)项目中的服务容器。
选项包括:

--compress 通过gzip压缩构建上下环境
--force-rm 删除构建过程中的临时容器
--no-cache 构建镜像过程中不使用缓存
--pull 始终尝试通过拉取操作来获取更新版本的镜像
-m, --memory MEM为构建的容器设置内存大小
--build-arg key=val为服务设置build-time变量
--parallel并行构建映像。

构建服务一次,然后对其进行标记,默认情况下为project_service。例如,composetest_db。如果“compose”文件指定了 镜像名称,则会使用该名称标记镜像,并预先替换任何变量

config

docker-compose config [options]
验证并查看compose文件配置。
选项包括:

--resolve-image-digests  将镜像标签标记为摘要
--no-interpolate         不要插入环境变量。
-q, --quiet                 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
--services                  打印服务名称,每行一个。
--volumes                  打印数据券名称,每行一个。
--hash="*"                 打印服务配置散列,每行一个。为指定服务的列表设置                                                           “service1,service2”或使用通配符来显示所有服务

create

docker-compose create [options] [SERVICE…]
为服务创建容器。
选项包括:

--force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
--no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
--no-build:不创建镜像,即使缺失
--build:创建容器前,生成镜像

down

docker-compose down [options]
停止和删除容器、网络、卷、镜像。
选项包括:

--rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, --volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
--remove-orphans,删除服务中没有在compose中定义的容器
-t, --timeout   指定关机超时(以秒为单位)(默认值:10)

docker-compose down
停止容器并删除由创建的容器,网络,卷和映像up。

默认情况下,删除的唯一内容是:
在Compose文件中定义的服务的容器
networks在撰写文件的部分中定义的网络
默认网络(如果已使用)
定义为的网络和卷external永远不会删除。

events

docker-compose events [options] [SERVICE…]
选项包括:

--json      将事件输出为json对象流

使用该–json标志时,每行将打印一个json对象,其格式为:
{
“time”: “2015-11-20T18:01:03.615550”,
“type”: “container”,
“action”: “create”,
“id”: “213cf7…5fc39a”,
“service”: “web”,
“attributes”: {
“name”: “application_web_1”,
“image”: “alpine:edge”
}
}

exec

docker-compose exec [options] SERVICE COMMAND [ARGS…]
这等于docker exec。使用此子命令,您可以在服务中运行任意命令。默认情况下,命令是分配TTY的,因此您可以使用命令docker-compose exec web sh来获得交互式提示。
选项包括:

-d, --detach ,分离模式,后台运行命令。
--privileged ,获取特权。
-u, --user USER ,指定运行的用户。
-T 禁用分配TTY,默认docker-compose exec分配TTY。
--index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器
-e, --env KEY=VAL ,设置环境变量(可多次使用,API < 1.25不支持)
-w, --workdir ,指向此命令的workdir目录的路径。

kill

docker-compose kill [options] [SERVICE…]
选项包括:

-s SIGNAL ,向容器发出信号。默认信号是SIGKILL。

通过发送SIGKILL信号来强制停止服务容器。
支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT

logs

docker-compose logs [options] [SERVICE…]
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
选项包括:

--no-color ,单色输出
-f, --follow  ,日志输入
-t, --timestamps  ,显示时间戳
--tail="all"  , 从日志末尾显示的行数为每个容器

pause

docker-compose pause [SERVICE…]
暂停正在运行的服务容器

port

docker-compose port [options] SERVICE PRIVATE_PORT
显示某个容器端口所映射的公共端口。
选项包括:

--protocol=proto,指定端口协议,TCP(默认值)
--index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)

ps

docker-compose ps [options] [SERVICE…]
选项包括:

-q, --quiet ,只显示id
--services  ,显示服务
--filter KEY=VAL ,根据属性筛选服务
-a, --all  ,显示所有已停止的容器(包括run命令创建的容器)

pull

docker-compose pull [options] [SERVICE…]
拉取服务依赖的镜像。
选项包括:

--ignore-pull-failures  ,忽略拉取镜像过程中的错误
--parallel  ,多个镜像同时拉取
--no-parallel  ,禁止同时拉取多个
-q, --quiet   , 拉取镜像过程中不打印进度信息
--include-deps  ,可以将服务声明为依赖项

push

docker-compose push [options] [SERVICE…]
推送服务依的镜像。
选项包括:

--ignore-push-failures ,忽略推送镜像过程中的错误

restart

docker-compose restart [options] [SERVICE…]
重启项目中的服务。
选项包括:

-t,--timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)

docker-compose restart
重新启动所有已停止并正在运行的服务。
如果对docker-compose.yml配置进行更改,则运行此命令后不会反映这些更改。
例如,重新启动后不会更新对环境变量的更改(在构建容器之后但在执行容器的命令之前添加)。

rm

docker-compose rm [options] [SERVICE…]
选项包括:

-f, --force  ,强制直接删除,包括非停止状态的容器
-s, --stop  ,如果需要,在删除之前,停止容器
-v   ,删除任何附加到容器的匿名卷

删除停止的服务容器。

默认情况下,不删除附加到容器的匿名卷。您可以使用来覆盖它-v。要列出所有卷,请使用docker volume ls。

任何不在卷中的数据都将丢失。

不带任何选项运行命令还会删除由docker-compose up或创建的一次性容器docker-compose run

run

docker-compose run [options] [-v VOLUME…] [-p PORT…] [-e KEY=VAL…] [-l KEY=VALUE…]
SERVICE [COMMAND] [ARGS…]
选项包括:

-d, --detach   ,分离模式:在后台运行容器,打印新的容器名称。
--name NAME   ,为容器分配一个名称
--entrypoint CMD   ,覆盖镜像的入口点
-e KEY=VAL  ,设置环境变量(可多次使用)
-l, --label KEY=VAL  ,添加或覆盖标签(可以多次使用)
-u, --user=""  ,指定的用户名或uid运行
--no-deps  ,禁止启动链接服务。
--rm   ,运行后移除容器。在分离模式下忽略。.
-p, --publish=[]  ,将容器的端口发布到主机
--service-ports  ,在启用和映射服务端口的情况下运行命令主机。
--use-aliases   ,在网络中使用服务的网络别名容器连接。
-v, --volume=[]  ,绑定挂载卷(默认[])
-T   ,禁用pseudo-tty分配。默认情况下“docker-compose运行”分配一个遥控。
-w, --workdir=""  ,容器内的工作目录

针对服务运行一次性命令。例如,以下命令启动web服务并bash作为其命令运行。
docker-compose run web bash

您与run start一起使用的命令在新容器中启动,该容器具有由服务的配置定义的配置,包括卷,链接和其他详细信息。但是,有两个重要区别。

首先,传递的命令将run覆盖服务配置中定义的命令。例如,如果 web服务配置以开头bash,则用docker-compose run web python app.py覆盖它python app.py。

第二个区别是该docker-compose run命令不会创建服务配置中指定的任何端口。这样可以防止端口与已经打开的端口发生冲突。如果确实要创建服务的端口并将其映射到主机,请指定–service-ports标志:
docker-compose run --service-ports web python manage.py shell

另外,可以使用–publish或-p选项指定手动端口映射,就像使用时一样docker run:
docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell

如果启动使用链接配置的服务,则该run命令首先检查链接服务是否正在运行,并在停止时启动该服务。一旦所有链接的服务都在运行,则runexec将执行您传递的命令。例如,您可以运行:
docker-compose run db psql -h db -U docker

这将为链接的db容器打开一个交互式PostgreSQL shell 。

如果您不希望run命令启动链接的容器,请使用–no-deps标志:
docker-compose run --no-deps web python manage.py shell

如果要在覆盖容器的重新启动策略的同时运行后除去该容器,请使用–rm标志:
docker-compose run --rm web python manage.py db upgrade

这将运行数据库升级脚本,并在完成运行后删除容器,即使在服务配置中指定了重新启动策略也是如此。

scale

不推荐使用此命令请使用带有标志的up命令 --scale。请注意,up与–scale标志一起使用与命令有一些细微的差异scale,因为它包含了up命令的行为。

docker-compose scale [options] [SERVICE=NUM…]
设置指定服务运行的容器个数。

数字以形式指定为参数service=num。例如:

docker-compose scale web=2 worker=3

start

docker-compose start [SERVICE…]
docker-compose start
启动已经存在的服务容器。

stop

docker-compose stop [options] [SERVICE…]

选项包括:

 -t, --timeout TIMEOUT  ,指定关机超时(以秒为单位)(默认值:10)

停止运行容器而不删除它们。可以从重新开始 docker-compose start

top

docker-compose top

显示正在运行的进程。

unpause

docker-compose unpause [SERVICE…]

取消暂停已暂停的服务容器。

up

docker-compose up [options] [–scale SERVICE=NUM…] [SERVICE…]
选项包括:

-d, --detach  ,在后台运行服务容器
--no-color ,不使用颜色来区分不同的服务的控制输出
--quiet-pull ,拉取镜像过程中不打印进度信息
--no-deps ,不启动服务所链接的容器
--force-recreate ,强制重新创建容器,不能与–no-recreate同时使用
--always-recreate-deps ,创建容器的依赖
--no-recreate ,如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
--no-build ,不自动构建缺失的服务镜像
--no-start ,不要在创建服务之后再启动它们。
--build ,在启动容器前构建服务镜像
--abort-on-container-exit ,停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t, --timeout TIMEOUT ,停止容器时候的超时(默认为10秒)
-V, --renew-anon-volumes ,重新创建匿名卷,而不是检索
--remove-orphans ,删除服务中没有在compose文件中定义的容器
--exit-code-from SERVICE ,返回所选服务的退出码容器
–scale SERVICE=NUM ,设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数

docker-compose up
启动所有服务
docker-compose up -d

构建,(重新)创建,启动并附加到服务的容器。

除非它们已经在运行,否则此命令还将启动所有链接的服务。

该docker-compose up命令汇总每个容器的输出(本质上是docker-compose logs -f)。当命令退出时,所有容器都将停止。运行docker-compose up -d 将在后台启动容器并使它们继续运行。

如果已有用于服务的容器,并且在创建容器后更改了服务的配置或映像,请docker-compose up通过停止并重新创建容器(保留装入的卷)来获取更改。为防止Compose获取更改,请使用该–no-recreate 标志。

如果要强制Compose停止并重新创建所有容器,请使用该 --force-recreate标志。

如果进程遇到错误,则此命令的退出代码为1。
如果使用SIGINT(ctrl+ C)或中断该过程SIGTERM,则容器将停止,并且退出代码为0。
如果在此关闭阶段再次发送SIGINT或,SIGTERM则会终止正在运行的容器,并且退出代码为2
在后台所有启动服务
-f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d

<think>好的,用户现在想了解docker-compose.yml文件的详细用法,特别是文件格式和命令详解。首先,我需要回顾之前的对话历史。用户之前遇到了LibreOffice处理PDF时的报错问题,我提供了解决方案和相关问题。现在用户转向了Docker Compose的主题,可能是在开发或部署环境中遇到了相关问题。 用户引用了站内的一篇关于docker-compose.yml配置的文章,但提到该引用可能不是他们的真实需求,需要更多参考他们之前的问题和我的回答。之前的回答结构清晰,分步骤说明,并附带了相关问题和引用,所以这次也应该保持类似的结构。 首先,我需要确定用户的需求层次。他们可能刚接触Docker Compose,需要从基础的文件结构讲起,包括常用命令、配置项的作用,以及实际示例。同时,用户提到“命令详解”,可能需要区分docker-compose的命令和docker命令的区别,比如up、start、build等。 接下来,我应该组织内容结构。根据用户提供的引用,他们可能对docker-compose.yml的配置、常用命令、执行顺序、卷的类型以及yml和yaml的区别感兴趣。但用户明确说引用仅供参考,所以需要以他们的实际需求为主,即文件格式和命令详解。 需要涵盖的主要内容点包括: 1. docker-compose.yml的基本结构和语法(YAML格式)。 2. 核心配置项的解释,如services、volumes、networks等。 3. 常用命令的详细说明,如up、down、build、logs等,以及它们的参数。 4. 可能的高级用法,如环境变量、依赖管理、扩展配置等。 5. 示例代码,帮助用户理解如何编写自己的docker-compose文件。 6. 常见问题解答或相关问题的推荐,如用户可能遇到的网络问题、卷挂载问题等。 同时,需要注意用户可能对docker-composedocker命令的区别不太清楚,需要明确说明。例如,docker-compose up与docker-compose start的区别,以及docker-composedocker run的对应关系。 还要考虑用户的实际应用场景,比如多容器应用的编排、开发环境与生产环境的配置差异等。可能需要提供不同场景下的配置示例,例如带有数据库、Web服务器和缓存服务的典型应用栈。 此外,需要确保内容符合格式要求:使用中文,行内数学表达式用$...$,独立公式用$$...$$(不过可能在Docker主题中用得较少),正确使用LaTeX语法,生成相关问题等。 最后,检查是否有需要引用的地方,比如Docker官方文档或最佳实践指南,并添加引用标识。例如,关于版本兼容性或特定配置项的官方说明。 现在需要将这些思考整理成一个结构化的回答,分步骤详细解释docker-compose.yml的各个方面,确保清晰易懂,并附带示例代码和相关问题。同时,保持与之前回答一致的风格,如使用标题、代码块、表格等元素来增强可读性。</think>### Docker Compose配置文件与命令详解 --- #### 一、核心文件结构 Docker Compose采用YAML格式(扩展名`.yml`或`.yaml`),基础结构包含三个核心层级: ```yaml version: "3.8" # 指定语法版本[^1] services: # 容器服务定义 web: image: nginx:alpine ports: - "80:80" volumes: # 持久化存储定义 db_data: {} networks: # 自定义网络配置 app_net: driver: bridge ``` --- #### 二、关键配置项解析 **1. 服务定义(services)** 每个服务对应一个容器实例,支持完整Docker参数: ```yaml app: build: ./dir # 构建上下文路径 image: myapp:1.0 # 优先级高于build depends_on: # 启动顺序控制 - redis - db environment: - NODE_ENV=production env_file: .env # 环境变量文件 ports: - "8080:80" # 主机端口:容器端口 volumes: - type: bind source: ./data target: /app/data ``` **2. 网络配置(networks)** 支持自定义网络隔离: ```yaml networks: frontend: driver: bridge ipam: config: - subnet: 172.28.0.0/24 ``` **3. 存储卷(volumes)** 两种挂载方式对比: | 类型 | 示例 | 数据位置 | |------------|--------------------------|-----------------------| | 命名卷 | `db_data:/var/lib/mysql` | Docker管理目录 | | 绑定挂载 | `./cache:/tmp/cache` | 主机指定路径 | --- #### 三、常用命令操作指南 **1. 生命周期管理** ```bash # 完整构建启动(重建镜像) docker-compose up --build # 仅启动已有容器 docker-compose start # 停止并删除容器 docker-compose down -v # -v清除关联卷 ``` **2. 调试与监控** ```bash # 查看实时日志(带时间戳) docker-compose logs -f --tail=100 --timestamps # 执行容器内命令 docker-compose exec web sh # 资源使用统计 docker-compose stats ``` **3. 扩展操作** ```bash # 水平扩展服务实例 docker-compose up --scale web=3 -d # 强制重建镜像(跳过缓存) docker-compose build --no-cache # 配置验证 docker-compose config ``` --- #### 四、高级配置模式 **1. 多环境配置** 通过`-f`指定多个配置文件: ```bash # 基础配置+覆盖配置 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up ``` 覆盖文件示例: ```yaml services: web: environment: - DEBUG=0 deploy: resources: limits: cpus: '2' memory: 4G ``` **2. 动态变量注入** 使用`${VARIABLE}`语法: ```yaml environment: - API_KEY=${API_KEY:-default} ``` **3. 健康检查配置** ```yaml services: db: healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 3 ``` --- #### 五、常见问题解答 **Q1: `docker-compose up`与`docker run`有何对应关系?** `docker-compose up`相当于组合执行: ```bash docker build -t image_name . # 如果配置了build docker run -p ports -v volumes image_name ``` **Q2: 如何查看服务依赖关系图?** ```bash docker-compose config --services # 列出所有服务 docker-compose ps --services # 显示运行状态 ``` **Q3: 版本兼容性问题如何解决?** 使用版本检测命令: ```bash docker-compose version # 输出包含:Docker Compose version v2.17.2 ``` 各版本对照表: | Compose文件版本 | Docker Engine最低版本 | |----------------|-----------------------| | 3.8 | 19.03.0+ | | 3.7 | 18.06.0+ | | 2.4 | 17.12.0+ | --- ### 相关问题 1. 如何实现Docker Compose的跨主机部署? 2. Docker SwarmDocker Compose的主要区别是什么? 3. 如何通过Compose实现容器间的负载均衡? [^1]: Docker官方建议使用与Docker Engine版本兼容的Compose文件格式(参考Docker文档Compose文件版本矩阵)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值