我试图确保在db容器启动并准备接受连接之前,我的应用程序容器不会运行迁移/启动。
所以我决定使用healthcheck并依赖于docker compose file v2中的选项。
在应用程序中,我有以下内容
app:
...
depends_on:
db:
condition: service_healthy
另一方面,db有以下健康检查
db:
...
healthcheck:
test: TEST_GOES_HERE
timeout: 20s
retries: 10
我尝试了一些方法,比如:
test:[“CMD”,“test-f var/lib/mysql/db”]
test:[“CMD”,“echo”SELECT version();“|mysql”]
test:[“CMD”、“mysqladmin”、“Ping”、“-h”、“localhost”]
有人有解决办法吗?
这应该够了
version: '2.1'
services:
mysql:
image: mysql
ports: ['3306:3306']
environment:
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
healthcheck:
test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
如果您使用的是docker compose v3,条件作为
依赖的选项已被删除。
建议的路径是使用
等待它
、dockerize
或等待
。在docker compose.yml
文件中,将命令更改为:
command: sh -c 'bin/wait-for db:3306 -- bundle exec rails s'
我个人更喜欢
等待
,因为它可以在Alpine容器中运行(sh
兼容,不依赖于bash
)。缺点是它依赖于netcat
,因此如果您决定使用它,请确保容器中安装了netcat
,或者将其安装在Dockerfile中,例如:
# for Alpine image:
RUN apk update && apk add netcat-openbsd
# otherwise:
RUN apt-get -q update && apt-get -qy install netcat
撰写了一篇关于启动顺序的好文档。
我还分叉了
等待
项目,以便它可以检查健康的HTTP状态(它使用wget
)。然后你可以做这样的事情:
command: sh -c 'bin/wait-for http://api/ping -- jest test'
PS:PR也准备合并,以将该容量添加到<代码>等待<代码>项目中。
version: "2.1"
services:
api:
build: .
container_name: api
ports:
- "8080:8080"
depends_on:
db:
condition: service_healthy
db:
container_name: db
image: mysql
ports:
- "3306"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_USER: "user"
MYSQL_PASSWORD: "password"
MYSQL_DATABASE: "database"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
api容器不会启动,直到db容器正常运行(基本上直到mysqladmin启动并接受连接)。
我正在使用MySQL。来自MySQL官方网站的NET连接器。我正在尝试从我的C#程序到Mysql db建立安全的SSL连接。Mysql服务器允许使用SSL连接。变量设置为和,和被指定。 用户的权限为: 所以我假设,这个用户没有SSL就无法登录?我说得对吗? 我在C#程序中的连接字符串如下所示: 请确保此连接字符串没有指向证书文件的任何路径!它只有“SSLMode=Required”选项。是否可以在
问题内容: 如何检查连接是否已在事务中?我正在使用Microsoft SQL Server数据库文件。 问题答案: 经过一番搜索,我发现了另一个“堆栈溢出”问题。事实证明,您不能在ADO.NET中嵌套事务。尝试时,您可能最终会启动两个不相关的事务,这会导致并行事务错误。 要查看连接当前是否在事务中,可以执行以下操作: 这将返回嵌套事务的数量。 请注意,您可以手动嵌套事务,而无需使用SqlTrans
问题内容: 如何使用Javascript检查互联网连接?这样,我可以有一些条件说“在生产过程中使用Google缓存的JQuery版本,在开发过程中使用该版本或本地版本,具体取决于Internet连接”。 问题答案: 针对您的特定情况的最佳选择可能是: 在您的结束标记之前: 鉴于您的问题集中在jQuery上,这可能是最简单的方法。 如果您想要一个更强大的解决方案,可以尝试: 阅读有关W3C在脱机We
我在网上搜索了很长一段时间,但我找不到我要找的东西。 如果我的设备已经连接到蓝牙设备(/在我启动应用程序之前),我如何通过我的应用程序发现。 我希望有类似bool BluetoothAdapter的东西。isPaired()
但是它太复杂了,无法从Java代码中完成,我认为这不是我应该使用的方向。 提前谢了。
我试着检查一个链表的最后一个节点是否指向头部。这段代码似乎为问题给出了肯定的结果,但也为包含指向非头节点的节点的列表给出了假肯定。 我尝试了不同的方法,比如检查慢节点是否等于返回true点的head,但这似乎不起作用。 有什么建议吗?