You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose是否有类似npm scripts的功能,可按需执行容器命令?

实现Docker Compose自定义快捷命令的方案

方法1:编写本地bash脚本(最直接)

在项目根目录创建名为docker-do的可执行脚本,内容如下:

#!/bin/bash

COMMAND=$1

case $COMMAND in
  testmystuff)
    docker exec -it php-container ../vendor/phpunit/phpunit/phpunit tests/
    ;;
  render-something)
    docker exec -it php-container ./mycontainerscript render more-args-here
    ;;
  bash-php)
    docker exec -it php-container bash
    ;;
  *)
    echo "未知命令:$COMMAND,可用命令:testmystuff、render-something、bash-php"
    exit 1
    ;;
esac

给脚本添加执行权限:

chmod +x docker-do

之后即可通过以下方式执行命令:

./docker-do testmystuff

如果想简化为全局调用,可将脚本移动到/usr/local/bin目录,或者在shell配置文件(如~/.bashrc或~/.zshrc)中添加别名:

alias docker-do='/your/project/path/docker-do'

执行source ~/.bashrc刷新配置后,就能直接用docker-do testmystuff调用。

方法2:使用Makefile(适合多命令场景)

在项目根目录创建Makefile:

.PHONY: testmystuff render-something bash-php

testmystuff:
	docker exec -it php-container ../vendor/phpunit/phpunit/phpunit tests/

render-something:
	docker exec -it php-container ./mycontainerscript render more-args-here

bash-php:
	docker exec -it php-container bash

执行命令时只需输入:

make testmystuff

方法3:Docker Compose扩展字段+解析脚本(贴近你的yml定义设想)

在docker-compose.yml中用x-开头的自定义扩展字段存储命令(Docker Compose原生支持这类自定义字段):

services:
  php:
    container_name: php-container
    # 你的其他容器配置...

x-usercommands:
  php-container:
    testmystuff: "../vendor/phpunit/phpunit/phpunit tests/"
    render-something: "./mycontainerscript render more-args-here"
    bash-php: "bash"

编写解析该字段的docker-do脚本:

#!/bin/bash

COMMAND=$1

# 从docker-compose.yml读取对应命令
TARGET_CMD=$(docker-compose config --format json | jq -r ".\"x-usercommands\".\"php-container\".\"$COMMAND\"")

if [ -z "$TARGET_CMD" ] || [ "$TARGET_CMD" = "null" ]; then
  echo "未知命令:$COMMAND,可用命令:$(docker-compose config --format json | jq -r ".\"x-usercommands\".\"php-container\" | keys[]")"
  exit 1
fi

docker exec -it php-container $TARGET_CMD

给脚本加执行权限后,就能用./docker-do testmystuff执行命令,好处是所有自定义命令都集中在docker-compose.yml中,和你最初的设想一致。

注意:该方法需要安装jq工具来解析JSON,可通过apt install jq(Debian/Ubuntu)或brew install jq(Mac)安装。


内容的提问来源于stack exchange,提问作者Taylor Vance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:55:15