执行docker-compose up --build时command字段报错FATAL: Command <COMMAND> not found
解决GitLab Runner容器启动时执行自定义命令报错的问题
问题原因
GitLab Runner官方镜像的ENTRYPOINT默认是gitlab-runner,你在command字段填写的内容会被当作gitlab-runner的子命令执行,而非交给shell处理,因此无论输入什么普通命令,都会被识别为gitlab-runner的未知子命令,抛出FATAL: Command <COMMAND> not found.错误。
解决方案一:覆盖ENTRYPOINT并执行命令后启动Runner
修改docker-compose.yaml,将ENTRYPOINT设置为shell,同时在command中先完成自定义操作,最后启动gitlab-runner核心服务(避免容器执行完命令就退出):
version: '3' services: gitlab-runner: container_name: gitlab-runner image: gitlab/gitlab-runner:v15.8.2 volumes: - ./config:/etc/gitlab-runner - ./sock:/var/run/docker.sock entrypoint: ["/bin/bash", "-c"] command: | echo '123.123.255.11 adc.cde.com' >> /etc/hosts gitlab-runner run
解决方案二:使用自定义启动脚本
- 在本地创建启动脚本
start-runner.sh:
#!/bin/bash echo '123.123.255.11 adc.cde.com' >> /etc/hosts exec gitlab-runner run
- 给脚本添加执行权限:
chmod +x start-runner.sh
- 修改
docker-compose.yaml,挂载脚本并设置为ENTRYPOINT:
version: '3' services: gitlab-runner: container_name: gitlab-runner image: gitlab/gitlab-runner:v15.8.2 volumes: - ./config:/etc/gitlab-runner - ./sock:/var/run/docker.sock - ./start-runner.sh:/start-runner.sh entrypoint: ["/start-runner.sh"]
这种方式更灵活,适合后续扩展更多启动前操作。
其他容器启动时修改文件的方法
- 构建自定义镜像:基于原镜像创建Dockerfile,在构建阶段完成文件修改:
FROM gitlab/gitlab-runner:v15.8.2 RUN echo '123.123.255.11 adc.cde.com' >> /etc/hosts
之后通过docker-compose build构建镜像并启动容器。
- 使用
extra_hosts配置:如果只是添加hosts映射,Docker Compose的extra_hosts字段可直接实现,无需手动修改/etc/hosts:
version: '3' services: gitlab-runner: container_name: gitlab-runner image: gitlab/gitlab-runner:v15.8.2 volumes: - ./config:/etc/gitlab-runner - ./sock:/var/run/docker.sock extra_hosts: - "adc.cde.com:123.123.255.11"
Docker会自动将该映射写入容器的/etc/hosts,这是处理hosts映射的标准方式。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

