Bash脚本无法在docker映像上运行节点



我有一个应用程序,我想在一个独立的Docker映像上运行。我在基于Ubuntu的映像上运行得很好,但同样的脚本现在在Alpine上给我带来了麻烦。

这是我的docker文件:

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文件夹不可用?这可能是阿尔卑斯山特有的吗?

谢谢,

您收到的错误消息看起来像是典型的回车问题,因为app.js之后的报价已移动到行的开头

'rror: Cannot find module '/data/app.js

节点通常应该能够处理两个行的结尾,但shell脚本就不那么好了。

我通常将所有项目/文件/编辑器/git默认为Unix n,除非有特定的要求。

您可以使用dos2unix或jlengrand找到的问题中的一个答案转换现有文件。我喜欢perl -pi -e 's/rn/n/g',因为pie

相关内容

  • 没有找到相关文章

最新更新