Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 容器启动后在docker中运行多个命令_Ruby_Linux_Bash_Docker_Shell - Fatal编程技术网

Ruby 容器启动后在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

容器启动后如何运行/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/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,然后访问bash
docker 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错误意味着它找不到您试图在哪里运行此命令的命令?