首页 > 解决方案 > 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
...

标签: dockerdocker-composedockerfile

解决方案


好的,事实证明 node:alpine 有 node REPL 作为入口点。因此,这必须在 Dockerfile 中完成才能使其正常工作:

ENTRYPOINT ["/bin/sh", "seed.sh"]

推荐阅读