如何保持容器运行?

问题描述 投票:0回答:1

我有一个与 RHEL 8 操作系统不兼容的旧 rpm 软件包。我把它做成了docker镜像,希望能以docker的方式运行。但我失败了。我不知道问题出在哪里。

Dockerfile

# Dockerfile
FROM centos:7
COPY  mediaserver-1.0.1-12.dev7.x86_64.rpm /opt/
COPY  start_up.sh /opt/
RUN  yum install -y gnutls && yum install -y /opt/mediaserver-1.0.1-12.dev7.x86_64.rpm  \
     && rm -f /opt/mediaserver-1.0.1-12.dev7.x86_64.rpm \
     && yum clean all \
     && rm -rf /var/cache/yum \
     && chmod +x /opt/start_up.sh

WORKDIR /opt/mediaserver

EXPOSE 6001
EXPOSE 17612

ENTRYPOINT ["/bin/bash","-c"]
CMD  sh /opt/start_up.sh

start_up.sh

#!/bin/bash

/etc/init.d/"$program_name" start &

appid=$!

sleep 5

ps aux | grep -q "$program_name"
if [ $? -ne 0 ]; then
  echo "media app failed to start"
  exit 1
fi

echo $appid > /opt/mediaserver/app.pid
exit 0

我用

docker run -it
,可以正常进入容器,但是服务没有启动。我可以手动启动它。

我使用docker run -it,可以正常进入容器,但是服务没有启动。我可以手动启动它。

root     30512     1  0 23:52 ?        00:00:00 /opt/mediaserver/bin/SystemShell -r mediaserver:/opt/mediaserver/bin/mediaserve root     30513 30512  3 23:52 ?        00:00:00 /opt/mediaserver/bin/mediaserver -s mediaserver -m 

docker docker-image
1个回答
0
投票

您的

start_up.sh
需要一个变量名称
$program_name
,但是,您尚未在任何地方定义它。这就是为什么使用
CMD sh /opt/start_up.sh
结果 Docker 容器在
sh
shell 处停止并等待下一个指令。

要解决此问题,您可以

  • 通过使用您的应用程序名称更新
    $program_name
    来硬编码您的初始化脚本,例如,如果媒体服务器启动脚本是
    mediaserver
    ,则将
    $program_name
    替换为
    mediaserver
  • 或者更新您的
    start_up.sh
    以接受输入,然后将 CMD 更新为类似
    CMD sh /opt/start_up.sh mediaserver
    的内容(假设程序名称为
    mediaserver
© www.soinside.com 2019 - 2024. All rights reserved.