Последние пару часов я пытался запустить свой скрипт startup.sh
при запуске контейнера докеров, но по какой-то причине он не работает.
Мой Dockerfile для создания образа:
FROM armv7/armhf-ubuntu:latest
MAINTAINER Mohammed Noureldin <[email protected]>
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 --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
означает, что ваш сценарий оболочки использует разрывы строк Windows (CRLF или\r\n
), что сбивает с толку Bash. Убедитесь, что вы преобразовали свой сценарий в разрывы строк Unix/Linux (LF или просто\n
), чтобы избавиться от этой ошибки. Ваш текстовый редактор должен иметь возможность конвертировать файл для использования LF вместо CRLF... - person nwinkler   schedule 01.11.2016