从docker compose在容器中运行脚本?

从docker compose在容器中运行脚本?,docker,docker-compose,Docker,Docker Compose,试图通过compose w/out将一些小软件包安装到容器中,这需要使用我自己的dockerfile,但无论我是否尝试仅安装文件夹并调用脚本,如: volumes: - '/opt/docker/configs/extras:/home' command: - 'bash /home/install-extra-stuff.sh' 或者直接装入文件并调用它,如: volumes: - '/opt/docker/configs/extras/install-extra-stuff.s

试图通过compose w/out将一些小软件包安装到容器中,这需要使用我自己的
dockerfile
,但无论我是否尝试仅安装文件夹并调用脚本,如:

volumes:
  - '/opt/docker/configs/extras:/home'
command:
  - 'bash /home/install-extra-stuff.sh'
或者直接装入文件并调用它,如:

volumes:
  - '/opt/docker/configs/extras/install-extra-stuff.sh:/home/install-extra-stuff.sh'
command:
  - 'bash /home/install-extra-stuff.sh'
我得到一个错误,文件不存在

ifelse:fatal:无法执行bash/home/install-extra-stuff.sh:没有这样的文件或目录 今天下午6:10[cmd]bash/home/install-extra-stuff.sh退出

脚本本身包含:

#!/bin/bash

# Ping
apt-get update && apt install iputils-ping -y
跳入容器本身并在上面注释掉的行开始之后运行这些命令,可以很好地安装包


任何想法(除了使用
dockerfile
?)

当在
docker compose.yml
中运行
命令时,它将作为
sh-c命令
传递到图像,因此如果命令是字符串
“bash/home/install extra stuff.sh”
,则shell将无法正确解析该命令

我建议删除
bash
,如果这是一个选项:

命令:
-/home/install-extra-stuff.sh
或者,如果您可以使用版本3语法将docker compose转换为:

命令:[“bash”,“/home/install extra stuff.sh”]
下面是运行
docker compose-up--build
时正确运行测试脚本
script.sh
的一些示例

默认语法
服务:
测试:
生成:。
卷数:
-/home/test/script.sh:/script.sh
命令:
-/script.sh
版本3语法
版本:“3”
服务:
测试:
生成:。
卷数:
-/home/test/script.sh:/script.sh
命令:[“/bin/sh”,“/script.sh”]

这个容器大概除了安装一些软件包并终止之外,还会做其他事情,不是吗?如果是这样的话,您最好使用dockerfile,按照您想要的方式构建映像,然后在撰写文件中使用新映像


如果映像已经定义了入口点,则在compose文件中运行脚本以安装软件包(如
命令:
)可能不起作用,即使您让它开始工作,安装脚本也将运行,然后容器将在完成后终止。

如果您已经尝试过此操作,请原谅。您尝试过不同的命令格式吗?我不确定是否匹配。可能尝试:
-[“bash”、“/home/install extra stuff.sh”]
-bash/home/install extra stuff.sh
Dockerfile看起来并不像您在这里展示的那样复杂;主要区别在于需要在文件的开头放置一行
FROM
,并在
apt get…
命令之前运行
。为什么不用呢?