我的配置方式一:
dockerfile
ENTRYPOINT ['/bin/bash',"/bar/www/sh.sh"]CMD ["php-fpm"]
docker-compose
tty: true无 command
我的配置方案二:
只配置docker-compose 并且将 docekrfile 中的 ENTRYPOINT 去掉
command ['/bin/bash',"/bar/www/sh.sh"]
两个方案都是 docker 一直在重启。我打印日志看到sh.sh 是成功运行的。
我的sh.sh 是一个后台运行的脚本
无论我是在dockerfile 里面写 还是在docker-compose 里面写,感觉是执行了command 后挂起的程序就失效了,比如我的 CMD 里面的 php-fpm 就是要让容器一直挂着的。
请问出现这样的问题是怎么回事?
我应该如何配置我的dockerfile 或者 docker-compose 让容器在运行的时候执行我的后台运行脚本
看了AI 的回复测试后
发现不管是在dockerfile 中的 cmd 或者 ENTRYPOINT 都需要让程序挂起,不然容器会退出
我的解决办法是
去掉dockerfile 中的cmd 和 ENTRYPOINT
在docker-compose 中直接去执行这个sh 脚本
command: ['/bin/bash',"/bar/www/sh.sh"]
或者
entrypoint: ['/bin/bash',"/bar/www/sh.sh"]
shell 脚本中
最后一句
php-fpm
如果不是php 可以写
tail -f /dev/null
这样就可以让容器保持运行并且也成功的执行了脚本
这个问题出现的原因在于 ENTRYPOINT
和 CMD
在 Docker 中的不同行为。ENTRYPOINT
是容器启动时要运行的命令,而 CMD
是为 ENTRYPOINT
提供默认参数的。当 docker-compose
启动容器时,它会覆盖 Dockerfile
中的 CMD
,但不会覆盖 ENTRYPOINT
。
在你的配置方案一中,ENTRYPOINT
是 /bin/bash
,并且它的参数是 "/bar/www/sh.sh"
。当容器启动时,它会尝试执行这个脚本,但是由于你的 sh.sh
脚本是后台运行的,所以 /bin/bash
进程会立即退出,导致容器也退出,然后 Docker 会重新启动容器。这就是为什么你看到容器一直在重启的原因。
在配置方案二中,你在 docker-compose
中设置了 command
,这实际上覆盖了 Dockerfile
中的 ENTRYPOINT
和 CMD
。但是,同样的问题也会发生,因为你的 sh.sh
脚本是后台运行的,所以 command
也会立即退出,导致容器退出并重新启动。
为了解决这个问题,你可以尝试以下配置:
Dockerfile
中只设置 ENTRYPOINT
,不设置 CMD
:ENTRYPOINT ['/bin/bash', '/bar/www/sh.sh']
docker-compose
中设置 command
为 php-fpm
,并且使用 detach
选项让 sh.sh
脚本在后台运行:command: php-fpmtty: truedetach: true
这样,当容器启动时,它会首先执行 sh.sh
脚本,然后将其放入后台运行。接着,它会启动 php-fpm
,这将使容器保持运行状态,即使 sh.sh
脚本完成执行。
请注意,detach
选项不是 Docker 官方支持的功能,而是某些 Docker 客户端(如 Docker Compose)提供的。因此,它可能不在所有环境中都可用。
另一个选择是在 sh.sh
脚本中添加一个无限循环,使其保持运行状态,而不是在后台运行。例如:
#!/bin/bash/bar/www/sh.sh &while true; do sleep 1done
这样,即使 sh.sh
脚本完成执行,无限循环也会使容器保持运行状态。
本文向大家介绍CentOS7 安装docker 解决启动不了的问题,包括了CentOS7 安装docker 解决启动不了的问题的使用技巧和注意事项,需要的朋友参考一下 CentOS7安装docker 启动不了,在工作当中遇到这个问题,当时急的不清,网上资料又不多,不过经过自己的捣鼓终于解决了 这个问题! 3月 10 13:01:20 test.mayocase.com systemd[1]: F
本文向大家介绍解决docker重启redis,mysql数据丢失的问题,包括了解决docker重启redis,mysql数据丢失的问题的使用技巧和注意事项,需要的朋友参考一下 官方文档: 所以 mysql应如下启动: docker run -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=密码 -v /windows盘符/指定的文件夹路径:/var/lib/mysql
10.10. 公共问题的解决方案 10.10.1. 对一个特定的 DataSource 使用错误的事务管理器 开发者需要按照需求仔细地选择正确的 PlatformTransactionManager 实现。理解Spring的事务抽象如何与JTA全局事务一起工作是非常重要的。使用得当,就不会有任何冲突:Spring仅仅提供一个直观的、可移植的抽象层。 如果你使用全局事务,你 必须 为你的所有事务操作
本文向大家介绍Nginx tp3.2.3 404问题解决方案,包括了Nginx tp3.2.3 404问题解决方案的使用技巧和注意事项,需要的朋友参考一下 最近我把Apache给换成nginx,当我把tp项目搬过去运行的时候发现404 错误 ,原来是因为nginx不支持 pathinfo 模式,需要自己配置 下面我配置 在server配置里面 保存配置之后,重启 nginx ,配置成功 直接支持类
解决方案常见问题 Windows Needing to re-target the Windows SDK XCode XCode PNG Compression issue It is possible that your PNG images contain incorrect color profiles. You can convert color profiles using Image
本文向大家介绍eclipse连接不到genymotion问题的解决方案,包括了eclipse连接不到genymotion问题的解决方案的使用技巧和注意事项,需要的朋友参考一下 (1)很多朋友在使用genymotion开发安卓应用程序的时候,会遇见完全正确的安装但是在运行的时候仍然找不到,genymotion上的设备,在打开的devices上找不到如下图所示: (2)解决的方法如下: 1、关闭ecl