docker-compose 'command' 关键字给出:“致命:命令 <COMMAND> 未找到。”

问题描述 投票:0回答:1

执行时

docker-compose up --build
我收到错误
FATAL: Command <COMMAND> not found.
我的 docker-compose.yaml 文件。

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
        command: bash -c "echo '123.123.255.11 adc.cde.com' >> /etc/hosts"

我放在那里的命令并不重要。到目前为止,我尝试过的每个命令都遇到相同的错误(

ls
cd
/bin/bash
sh
/bin/sh
或我复制到卷的 shell 脚本)。 我如何让它执行?

作为侧节点:是否有另一种方法可以在容器启动时自动修改文件?

Docker Compose 版本 2.22.0 使用的图像:gitlab/gitlab-runner:v15.8.2

我知道事实上,bash 在此图像上可用,因为

docker exec -it <container> bash
确实有效(以及我列出的所有其他内容)。

docker docker-compose gitlab-ci-runner
1个回答
0
投票

图像

gitlab/gitlab-runner:v15.8.2
定义了
ENTRYPOINT
脚本:

$ docker image inspect gitlab/gitlab-runner:v15.8.2
...
            "Entrypoint": [
                "/usr/bin/dumb-init",
                "/entrypoint"
            ],
...

入口点脚本最终运行:

exec gitlab-runner "$@"

所以当你设置时:

command: /usr/bin/bash -c "echo '123.123.255.11 adc.cde.com' >> /etc/hosts"

你实际上正在跑步:

gitlab-runner /usr/bin/bash -c "echo ..."

并且

/usr/bin/bash
不是有效的
gitlab-runner
命令,因此会出现错误。


忽略上述所有内容,您当前的配置存在一个更根本的问题。如果它按您的预期工作并运行

bash
命令行,容器将立即退出(因为初始命令退出时容器已存在)。

对于您想要执行的操作,最简单的解决方案是在撰写文件中使用

extra_hosts
选项:

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 exec gitlab-runner cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
123.123.255.11  adc.cde.com
172.27.0.2      61da9a89d42f
© www.soinside.com 2019 - 2024. All rights reserved.