docker compose:文件显示为ls,但可以';执行时无法找到
我想为docker compose前端容器运行shellscript。当我尝试运行该文件时,出现一个错误,提示无法找到shell文件: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
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