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

如何在docker-compose启动时执行脚本且不覆盖镜像ENTRYPOINT/CMD

在Docker Compose中保留镜像默认启动逻辑并追加自定义脚本

需求背景

我需要用docker-compose启动容器时,让镜像自带的CMD正常执行,同时额外运行一段自定义脚本(用来给Jenkins容器安装PHP和Composer)。试过配置entrypoint,但会覆盖镜像默认的ENTRYPOINT和CMD,没法兼顾原有启动逻辑;复制修改Dockerfile又不方便后续镜像更新。

当前配置

docker-compose.yml

version: '3.8'
services:
  jenkins:
    image: jenkins/jenkins:2.361.1
    restart: always
    privileged: true
    user: root
    ports:
      - "8080:8080"
      - "50000:50000"
    container_name: "aaa-jenkins"
    volumes:
      - "./jenkins_configuration:/var/jenkins_home"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/usr/bin/docker:/usr/bin/docker"

自定义安装脚本

#!/bin/bash

apt update 
apt -y install php
apt -y install php-xml php-zip php-curl php-mbstring php-xdebug
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer

解决方案

通过自定义entrypoint脚本封装原有启动流程,具体步骤如下:

1. 编写自定义entrypoint脚本

创建custom-entrypoint.sh文件,先执行安装逻辑,再调用Jenkins原启动命令:

#!/bin/bash

# 可选:判断PHP是否已安装,避免重复执行安装
if ! command -v php &> /dev/null; then
    apt update 
    apt -y install php
    apt -y install php-xml php-zip php-curl php-mbstring php-xdebug
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php composer-setup.php --install-dir=/usr/local/bin --filename=composer
    composer
fi

# 调用Jenkins镜像原生启动命令,保留原有逻辑
exec /sbin/tini -- /usr/local/bin/jenkins.sh "$@"

用exec替换当前shell进程,确保容器能正确响应停止信号,避免异常退出。

2. 修改docker-compose.yml

挂载自定义脚本到容器,并设置为entrypoint:

version: '3.8'
services:
  jenkins:
    image: jenkins/jenkins:2.361.1
    restart: always
    privileged: true
    user: root
    ports:
      - "8080:8080"
      - "50000:50000"
    container_name: "aaa-jenkins"
    volumes:
      - "./jenkins_configuration:/var/jenkins_home"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/usr/bin/docker:/usr/bin/docker"
      - "./custom-entrypoint.sh:/usr/local/bin/custom-entrypoint.sh"  # 挂载脚本
    entrypoint: ["bash", "/usr/local/bin/custom-entrypoint.sh"]  # 设置entrypoint

3. 给脚本加执行权限

在宿主机上运行:

chmod +x custom-entrypoint.sh

启动容器

执行docker-compose up -d,容器会先运行安装脚本,再启动Jenkins服务,完全保留原有启动逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:50:49