【问题标题】:Starting bash script on Docker container startup doesn't work在 Docker 容器启动时启动 bash 脚本不起作用
【发布时间】:2016-11-01 15:19:50
【问题描述】:

在过去的几个小时里,我一直在尝试在 docker 容器启动时启动我的 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 运行命令:

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}

有人能解释一下发生了什么以及为什么它不起作用吗?

【问题讨论】:

  • \r 错误意味着您的 shell 脚本使用了 Windows 换行符(CRLF 或 \r\n),这会使 Bash 感到困惑。确保将脚本转换为 Unix/Linux 换行符(LF,或只是 \n)以消除该错误。您的文本编辑器应该能够将文件转换为使用 LF 而不是 CRLF...
  • @nwinkler 那是第二种情况,但是当我没有空格时怎么办?无论如何,我正在尝试按照您所说的进行转换
  • 尝试使用 LF 而不是 CRLF 的文件,它也可以解决最初的问题。
  • @nwinkler 确实如此!谢谢!您可以将其发布为答案吗?如果您告诉我如何直接在 Windows 中修复它(我使用的是 notepad++),那将非常酷,但我不知道如何修复它,所以我只是在 linux 的 vim 中重写了该文件。非常感谢
  • 谢谢 - 为此添加了一个答案,还附有一个关于如何在 Notepad++ 中执行此操作的问题的链接。

标签: bash docker dockerfile docker-container


【解决方案1】:

错误是由您的 shell 脚本中的行结尾引起的。看起来您正在使用 Windows 行尾(CRLF,或 \r\n),其中意外的 r 使 Bash 感到困惑。 Bash 只需要 LF 或 \n,因此会出现错误消息。

大多数程序员文本编辑器都支持进行这些更改。 Notepad++ 具有“编辑 > EOL 转换 > Unix/OSX 格式”。请参阅EOL conversion in notepad ++ 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2018-10-04
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多