我有一个与此类似的 docker-compose.yml
version: "3"
db:
networks:
selenoid: null
image: my-db:latest
restart: always
web:
networks:
selenoid: null
depends_on:
- db
image: my-web:latest
restart: always
environment:
DB_HOST: db
my-web:latest base image is FROM php:7.2-apache-stretch
在 Dockerfile 中,我复制了 2 个文件并在 my-web:latest
COPY wait.py /usr/local/bin/
COPY startup.sh /usr/local/bin/
ENTRYPOINT [ "sh","/usr/local/bin/startup.sh" ]
等待.py
import socket
import time
import os
port = int(3306) # 3306
db_host=os.environ['DB_HOST']
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
i=0
while i<300:
try:
print("trying to connect to database host at "+db_host+". Try : "+str(i))
s.connect((db_host, port))
s.close()
break
except socket.error as ex:
print("Sleeping for 1 second. Try : "+str(i))
time.sleep(1)
i+=1
startup.sh
python /usr/local/bin/wait.py
但是当我的 web
容器启动时,它总是会重新启动。
wait.py 的目的是等到 db
完全初始化。
我怎样才能做到这一点? 我已经在 postgres/tomcat docker 图像中完成了这项工作,并且效果很好。