我正在尝试运行我的应用程序,其中depends_on
我的Postgresql在Docker中,假设我的数据库Postgresql现在没有运行
并且在我的docker-compose.yml
中:
version: "3"
services:
myapp:
depends_on:
- db
container_name: myapp
build:
context: .
dockerfile: Dockerfile
restart: on-failure
ports:
- "8100:8100"
db:
container_name: postgres
restart: on-failure
image: postgres:10-alpine
ports:
- "5555:5432"
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: 12345678
POSTGRES_DB: dev
如何使MyApp
运行直到DB
服务知道我的DB
正在运行??
depends_on
的文档说明:
depends_on
在启动myapp
之前不会等待db
“就绪”-仅在启动之前。
因此,在运行应用程序之前,您必须检查数据库是否已就绪。
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
command: ["./wait-for-postgres.sh", "db", "python", "app.py"]
还有诸如wait-for-it、dockerize或wait-for等工具。
然而,这些解决方案有一些局限性,Docker说:
最好的解决方案是在应用程序代码中执行此检查,无论在启动时还是在连接因任何原因丢失时都是如此。
以下是我如何在JavaScript中使用重试策略:
async ensureConnection () {
let retries = 5
const interval = 1000
while (retries) {
try {
await this.utils.raw('SELECT \'ensure connection\';')
break
} catch (err) {
console.error(err)
retries--
console.info(`retries left: ${retries}, interval: ${interval} ms`)
if (retries === 0) {
throw err
}
await new Promise(resolve => setTimeout(resolve, interval))
}
}
}
我试图在我的中使用waet-for-it来等待mysql准备就绪,然后再创建依赖于它的服务。这是我的: 尝试使用docker compose运行此操作时出现以下错误: 开始集成tests_mysql_1错误 错误:对于集成-tests_mysql_1无法开启服务mysql:OCI运行时创建失败:container_linux.go:348:启动容器进程导致"exec: \"./ wait-for-
问题内容: 当前,我通过使用以下文件运行一个简单的Docker容器。 Docker文件 docker-compose.yml docker-compose.override.yml 我使用Windows映像通过以下命令创建容器,并且可以通过http:// localhost:9091 / 访问它。 我想使用HTTPS而非http访问我的应用程序。 我需要遵循哪些步骤? 问题答案: 您需要配置Web
注:如果你不喜欢使用sudo,你可以查看这里非root用户运行 这里有一个例子,使用数据卷在两个CouchDb之间共享相同的数据容器,这个可以用于热升级,测试不同版本的CouchDB数据等等。 创建第一个数据库 现在我们创建/var/lib/couchdb作为数据卷 COUCH1=$(sudo docker run -d -p 5984 -v /var/lib/couchdb shykes/cou
这个例子的目的是向您展示如何构建一个预装Riak的docker镜象。 创建Dockerfile 创建一个空文件Dockerfile $ touch Dockerfile 接下来,定义你想要来建立你镜像的父镜像。我们将使用Ubuntu(tag:最新版),从Docker Hub中下载: # Riak # # VERSION 0.1.0 # Use the Ubuntu base ima
非常简单,没有任何修饰,redis是使用一个连接附加到一个web应用程序。 创建一个redis docker容器 首先,我们先为redis创建一个Dockerfile FROM ubuntu:12.10 RUN apt-get update RUN apt-get -y install redis-server EXPOSE 6379 ENT
使用asyn/wait vs wait有什么区别task.run() 等待任务。运行示例- 异步等待示例-