docker compose:文件显示为ls,但可以';执行时无法找到

docker compose:文件显示为ls,但可以';执行时无法找到,docker,docker-compose,Docker,Docker Compose,我想为docker compose前端容器运行shellscript。当我尝试运行该文件时,出现一个错误,提示无法找到shell文件: services.app | /usr/local/bin/docker-entrypoint.sh: exec: line 8: /usr/src/app/frontend/entrypoint.sh: not found 这是我的docker撰写文件: docker撰写条目: frontend: build: ./frontend imag

我想为docker compose前端容器运行shellscript。当我尝试运行该文件时,出现一个错误,提示无法找到shell文件:

services.app | /usr/local/bin/docker-entrypoint.sh: exec: line 8: /usr/src/app/frontend/entrypoint.sh: not found
这是我的docker撰写文件:

docker撰写条目:

frontend:
    build: ./frontend
    image: app
    container_name: services.app
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000"
    env_file: ./.env
    stdin_open: true
    command: /usr/src/app/frontend/entrypoint.sh prod
但是,当我在docker compose文件中运行
命令:ls/usr/src/app/frontend/
时,我可以看到以下文件:

services.app | entrypoint.sh
shell文件真的丢失了还是我误解了这个错误?对如何修复它有什么建议吗

编辑: entrypoint.sh脚本:

#!/bin/bash

cp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/

exec npm start
我可以模拟错误,但我不能说你的情况就是这样:

$ mkdir /tmp/demo

$ ln -s /no/such/dir/entry.sh /tmp/demo/entry.sh # create soft link to non existent file

$ chmod +x /tmp/demo/entry.sh # and make it executable for good measure


因此,最终对我有效的方法就是在命令前面附加
sh

command: sh /usr/src/app/frontend/entrypoint.sh prod

您是否使shell脚本可执行(chmod+x)?是的,它应该是可执行的。我使用ls-l获得以下输出:
services.app |-rwxr-x 1 node node 92 Nov 21 14:55./frontend/entrypoint.sh
我正在运行脚本以获取node_modules文件夹,如中所建议,我将shell脚本的内容添加到图像中的postIs文件中?
卷:
隐藏图像中的所有内容,因此它可能不在图像中。如果您的图像类似于基于阿尔卑斯山的图像,它可能没有
/bin/bash
(但如果
sh
有效,则将shebang行更改为
#!/bin/sh
)。根据脚本中显示的内容,
node\u modules
树应该位于图像中,Dockerfile应该能够在没有此包装的情况下设置
CMD[“npm”,“start”]
command: sh /usr/src/app/frontend/entrypoint.sh prod