我有一个docker-compose.yml文件,该文件运行一个shell脚本,并且运行良好,直到突然之间它开始因以下原因而失败:
ERROR: for pol_app_1 Cannot start service app: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"run.sh\": executable file not found in $PATH": unknown
ERROR: for app Cannot start service app: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"run.sh\": executable file not found in $PATH": unknown
(我见过类似的问题,但他们没有解决这个特定问题)
我一直在做的只是对其使用的docker映像的更改,但是即使我将映像更改为简单的centos:latest
docker-compose仍然失败,并出现上述错误。
我的docker-compose.yml文件:
version: '3.5'
services:
app:
image: paulhollyer/phoenix:1.4.9
ports:
- 4000:4000
volumes:
- .:/app
depends_on:
- db
command: run.sh
db:
image: paulhollyer/postgres:12
command: 'postgres -c "max_connections=200"'
volumes:
- type: volume
source: postgres-data
target: /var/lib/postgresql/data
volume:
nocopy: true
restart: always
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_USER: "postgres"
POSTGRES_DB: "pol_dev"
volumes:
postgres-data:
run.sh
在项目根目录中的docker-compose.yml
旁边。
有人知道为什么找不到run.sh
吗?我会无意间导致该怎么办?
谢谢
答案 0 :(得分:0)
您必须根据其在容器中的位置进行引用。由于该文件位于您当前的主机目录中,并且您要添加的卷.:/app
应该是/app/run.sh
:
command: /app/run.sh
请注意避免发生奇怪的问题:如果/app
恰好是提取图像的WORKDIR
,则command: ./run.sh
也可以使用,但是要小心。例如,在这种情况下,/app
可能已经有一些文件,并且您的映射会将当前主机目录安装在它们之上,从而使它们不可访问。