docker - Dockerfile 无法启动 CMD 脚本
问题描述
我在 Dockerfile 中有这个:
FROM node:alpine
COPY seed.sh /
RUN chmod +x /seed.sh
RUN apk add --no-cache bash
CMD pwd; ls -al; cat seed.sh; ./seed.sh
然后我构建 docker-compose 并启动它:
[docker-compose.yml 部分]
...
dbseeder:
container_name: dbseeder
build:
context: ./db-seeder
dockerfile: Dockerfile
depends_on:
- db
...
构建/运行
docker-compose build --no-cache
docker-compose up
up输出如下:
dbseeder | /
dbseeder | total 68
dbseeder | drwxr-xr-x 1 root root 4096 Sep 2 12:27 .
dbseeder | drwxr-xr-x 1 root root 4096 Sep 2 12:27 ..
dbseeder | -rwxr-xr-x 1 root root 0 Sep 2 12:27 .dockerenv
dbseeder | drwxr-xr-x 1 root root 4096 Sep 2 12:27 bin
dbseeder | drwxr-xr-x 5 root root 340 Sep 2 12:27 dev
dbseeder | drwxr-xr-x 1 root root 4096 Sep 2 12:27 etc
dbseeder | drwxr-xr-x 1 root root 4096 Aug 12 21:22 home
dbseeder | drwxr-xr-x 1 root root 4096 Aug 12 21:22 lib
dbseeder | drwxr-xr-x 5 root root 4096 Apr 23 06:25 media
dbseeder | drwxr-xr-x 2 root root 4096 Apr 23 06:25 mnt
dbseeder | drwxr-xr-x 1 root root 4096 Aug 12 21:22 opt
dbseeder | dr-xr-xr-x 244 root root 0 Sep 2 12:27 proc
dbseeder | drwx------ 1 root root 4096 Aug 12 21:22 root
dbseeder | drwxr-xr-x 2 root root 4096 Apr 23 06:25 run
dbseeder | drwxr-xr-x 2 root root 4096 Apr 23 06:25 sbin
dbseeder | -rwxrwxrwx 1 root root 197 Sep 2 12:27 seed.sh
dbseeder | drwxr-xr-x 2 root root 4096 Apr 23 06:25 srv
dbseeder | dr-xr-xr-x 11 root root 0 Sep 2 12:27 sys
dbseeder | drwxrwxrwt 1 root root 4096 Aug 12 21:22 tmp
dbseeder | drwxr-xr-x 1 root root 4096 Aug 12 21:22 usr
dbseeder | drwxr-xr-x 1 root root 4096 Apr 23 06:25 var
dbseeder | #!/bin/bash
dbseeder |
dbseeder | echo "Seeding database..."
dbseeder |
dbseeder | cd seeders
dbseeder | npx sequelize db:seed:all --url 'mysql://root:pass123@dbserver/mydb'
dbseeder |
dbseeder | echo "Seeding done."
dbseeder | /bin/sh: ./seed.sh: not found
无论我做什么,都找不到seed.sh,但如您所见,它就在那里。
我究竟做错了什么?
编辑
是的,我尝试使用 '/bin/sh'
[部分向上输出]
...
dbseeder | #!/bin/sh
dbseeder |
dbseeder | echo "Seeding database..."
dbseeder |
dbseeder | cd seeders
dbseeder | #sequelize db:seed:all
dbseeder | npx sequelize db:seed:all --url 'mysql://root:pass123@dbserver/mydb'
dbseeder |
dbseeder | echo "Seeding done."
dbseeder | /bin/sh: ./seed.sh: not found
...
解决方案
好的,事实证明 node:alpine 有 node REPL 作为入口点。因此,这必须在 Dockerfile 中完成才能使其正常工作:
ENTRYPOINT ["/bin/sh", "seed.sh"]
推荐阅读
- php - 如何在woocommerce中实现特定产品的免费送货并设置默认送货
- javascript - 如何通过单击 JavaScript 中的按钮转到上一个选项卡?
- python - Python:AttributeError:“客户端”对象没有属性“命令”
- python - 根据值从数据框中删除所有行
- python - 下一页 Selenium with Scrapy 不工作
- javascript - 对每次随机生成的数组进行冒泡排序
- powershell - 根据用户输入从 CSV 文件中为 WinSCP .NET 程序集选择 SFTP 连接数据
- node.js - 在 Redis 中处理并发请求
- hyperledger-fabric - 频道创建失败。密钥组频道申请问题
- java - 使用 Do-while 循环创建三角乘法表