从docker compose在容器中运行脚本?
试图通过compose w/out将一些小软件包安装到容器中,这需要使用我自己的从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
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…
命令之前运行。为什么不用呢?