在Docker容器启动时启动bash脚本不起作用

在过去的几个小时里,我一直试图在Docker容器启动时启动我的startup.sh脚本,但由于某种原因,它不起作用。

我的Dockerfile来创build图像:

 FROM armv7/armhf-ubuntu:latest MAINTAINER Mohammed Noureldin <mne@hotmail.com> RUN apt update && apt upgrade -y && apt install -y mumble-server ADD scripts/startup.sh /startup.sh 

我的启动脚本:

 #!/bin/bash /etc/init.d/mumble-server start 

这里没有任何反应,虽然我试图在脚本内创build一个文件,但也没有发生任何事情!

我试图直接从命令行执行脚本,但它不工作我不知道为什么:

docker运行命令:

 docker run --name murmur -itd --restart always --network bridge -p 64738:64738 -v /var/lib/mumble-server/ -v /etc/ mnoureldin/murmur:latest /bin/bash -c "bash /startup.sh;/bin/bash" 

在这里,我试图手动执行脚本时得到的是:

 43b9d8dd4116bc605537c7af35ab186ca165ea6e957fab5908d39b2f085edf41 mohammed@server01:~/Dockerfiles/Mumble $ docker attach murmur root@43b9d8dd4116:/# bash .dockerenv boot/ etc/ lib/ mnt/ proc/ run/ srv/ sys/ usr/ bin/ dev/ home/ media/ opt/ root/ sbin/ startup.sh tmp/ var/ root@43b9d8dd4116:/# bash startup.sh Usage: /etc/init.d/mumble-server {start|stop|restart|force-reload} 

或者当我在脚本的两行之间有空行时,我得到这个错误:

 root@830193e67fd7:/# bash startup.sh startup.sh: line 2: $'\r': command not found Usage: /etc/init.d/mumble-server {start|stop|restart|force-reload} 

有人可以解释什么是heppening,为什么它不工作?

该错误是由shell脚本中的行尾引起的。 它看起来像你正在使用Windows行结束符(CRLF,或\r\n ),其中意外的r混淆Bash。 Bash只预计LF或\n ,因此是错误消息。

大多数程序员文本编辑器对进行这些更改都有某种支持。 记事本++有“编辑> EOL转换> Unix / OSX格式”。 有关更多信息,请参阅记事本++中的EOL转换 。