在过去的几个小时里,我一直试图在docker container start上启动我的startup.sh
脚本,但由于某种原因它无效。
我的Dockerfile创建图像:
FROM armv7/armhf-ubuntu:latest
MAINTAINER Mohammed Noureldin <m.n.e@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
这里没有任何事情发生,虽然我试图在脚本中创建一个文件,但也没有发生任何事情!
我尝试直接从命令行执行脚本,但它不起作用我不知道为什么:
docker run命令:
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以及为什么它不起作用?
答案 0 :(得分:4)
错误是由shell脚本中的行结尾引起的。看起来您正在使用Windows行结尾(CRLF或export function getAuthService(http: Http): LoggingService {
return new AuthService(http);
}
),其中意外的\r\n
令Bash感到困惑。 Bash只期望LF或r
,因此出现错误消息。
大多数程序员文本编辑器都会对进行这些更改提供某种支持。 Notepad ++具有“编辑&gt; EOL转换&gt; Unix / OSX格式”。有关详细信息,请参阅EOL conversion in notepad ++。