我有一个要在单个自包含 Docker 映像上运行的应用程序。我让它在基于Ubuntu 的映像上运行良好,但现在相同的脚本在Alpine上给我带来了麻烦。
这是我的码头文件:
FROM julienlengrand/alpine-node-rethinkdb
# Preparing
# RUN ln -snf /bin/bash /bin/sh
# # Define mountable directories.
VOLUME ["/data"]
# # Define working directory.
WORKDIR /data
# # Install app dependencies
COPY package.json /data
RUN npm install
# # Bundle app source
COPY . /data
# # Expose rethinkdb ports.
# - 8080: web UI
# - 28015: process
# - 29015: cluster
EXPOSE 8080
#EXPOSE 28015
#EXPOSE 29015
# Expose node app ports
EXPOSE 4567
CMD [ "/bin/sh", "/data/startApp.sh" ]
我的 startApp 脚本比较简单:
#!/bin/sh
rethinkdb --bind all & sleep 1; node dbCreate.js; sleep 2; nohup node workers/worker.js & node app.js
但是当我尝试运行它时,我收到以下错误:
module.js:442
throw err;
^
'rror: Cannot find module '/data/app.js
at Function.Module._resolveFilename (module.js:440:15)
at Function.Module._load (module.js:388:25)
at Module.runMain (module.js:575:10)
at run (bootstrap_node.js:352:7)
at startup (bootstrap_node.js:144:9)
at bootstrap_node.js:467:3
无论我是自动运行它,还是使用 shell 直接在图像中运行,都会发生这种情况。
我已经检查过,所有内容都正确放置在数据文件夹中。此外,如果我直接在 sh shell 中一个接一个地运行所有命令,那么一切都会按预期运行。
我也尝试过这样简化我的脚本:
#!/bin/sh
rethinkdb --bind all & sleep 1; node dbCreate.js; sleep 2; node app.js
但是同样的问题也会发生。
知道会出什么问题吗?通过 startApp 脚本运行时,什么会使我的 /data 文件夹不可用?莫非是Alpine的特殊性?
谢谢,