如何在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
相关产品推荐
相关产品推荐

