Ruby 容器启动后在docker中运行多个命令
容器启动后如何运行/bin/run1.sh和/bin/run2.sh! 另外,如果您能告诉我如何将/bin/run1.sh和/bin/run2.sh的日志发送到容器日志 Docker文件Ruby 容器启动后在docker中运行多个命令,ruby,linux,bash,docker,shell,Ruby,Linux,Bash,Docker,Shell,容器启动后如何运行/bin/run1.sh和/bin/run2.sh! 另外,如果您能告诉我如何将/bin/run1.sh和/bin/run2.sh的日志发送到容器日志 Docker文件 FROM ruby:2.5 COPY run1.sh /bin COPY run2.sh /bin RUN chmod +x /bin/run1.sh RUN chmod +x /bin/run2.sh COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/ent
FROM ruby:2.5
COPY run1.sh /bin
COPY run2.sh /bin
RUN chmod +x /bin/run1.sh
RUN chmod +x /bin/run2.sh
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
#!/bin/sh
echo `date` $@ >> /log.txt;
cat log.txt;
#!/bin/sh
echo `date` $@ >> /log2.txt;
cat log.txt;
run1.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
#!/bin/sh
echo `date` $@ >> /log.txt;
cat log.txt;
#!/bin/sh
echo `date` $@ >> /log2.txt;
cat log.txt;
run2.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
#!/bin/sh
echo `date` $@ >> /log.txt;
cat log.txt;
#!/bin/sh
echo `date` $@ >> /log2.txt;
cat log.txt;
您可以将
ENTRYPOINT[“ENTRYPOINT.sh”]
更改为ENTRYPOINT[“ENTRYPOINT.sh”、“run1.sh”、“run2.sh”]
以运行自定义bash脚本
如果不存在log.txt
文件,还需要创建该文件,并添加exec“$@”
以恢复容器的主进程
因此,您的runX.sh
文件应该如下所示
#/垃圾箱/垃圾箱
touch log.txt;
echo`date`$@>>log.txt;
cat log.txt;
执行官“$@”
请注意,如果您在rails上运行DB迁移,它们应该记录在您的应用程序日志中,该日志可以通过docker容器本身访问(从
docker ps
获取docker id,然后访问bashdocker exec-it/bin/bash
,您可以在其中导航到/logs/{your environment}.log
)您希望通过这一点实现什么?您想访问应用程序的ruby日志吗?谢谢您的回复Mshka!我只是想在容器启动后运行一些数据库迁移脚本。另外,如果可以将他们的日志发送到容器,以便我们可以监视数据库迁移的进度,那么我必须按照您的说明编辑的内容ENTRYPOINT[“ENTRYPOINT.sh”、“run1.sh”、“run2.sh”]在构建容器后,它将启动,然后退出来自后台程序的错误响应:容器f7f77ef11dcf53db4c375d00c696d07a607543b823610592a0f7a375eeafcc26未运行“”“我必须更新run.sh文件以恢复容器命令,更新了应答谢谢,Mashka谢谢你的建议!在我照你说的做了之后。不幸的是,容器在启动rails服务器之前运行脚本,如CMD CMD[“bundle”、“exec”、“rails”、“server”、“-b”、“0.0.0.0”]退出代码127命令[“bundle exec bin/rake db:migrate”]中所述。是的,这些脚本将在CMD命令启动服务器之前运行,127错误意味着它找不到您试图在哪里运行此命令的命令?