我需要带有一些数据库的sql server容器。我准备了以下dockerfile:
FROM microsoft/mssql-server-linux:latest
ENV ACCEPT_EULA Y
ENV SA_PASSWORD yourStrong(!)Password
WORKDIR sqlserver
COPY load_db.sh load_db.sh
COPY /resources/sql/ sql
ENTRYPOINT ./load_db.sh
所以它运行load_db.sh:
#!/usr/bin/env bash
SERVER_OUT=/var/log/sqlserver.out
TIMEOUT=90
/opt/mssql/bin/sqlservr &>${SERVER_OUT} &
function server_ready() {
grep -q -F 'Recovery is complete.' ${SERVER_OUT}
}
echo 'Wait until Microsoft SQL Server is up'
for (( i=0; i<${TIMEOUT}; i++ )); do
sleep 1
if server_ready; then
break
fi
done
echo 'Microsoft SQL Server is up'
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ${SA_PASSWORD} -Q "CREATE DATABASE MarketDataService;"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ${SA_PASSWORD} -d MarketDataService -i sql/2018.0100.000000001.Add_Layout_table.sql
要运行它,我已准备好followinf docker-compose文件:
services:
db:
build:
context: .
dockerfile: Dockerfile-db
ports:
- 1433:1433
当我尝试运行docker-compose up --build
时,它看起来没问题。
我有输出:
db_1 | Wait until Microsoft SQL Server is up
db_1 | Microsoft SQL Server is up
db_1 |
db_1 | (3 rows affected)
但是退出之后......
amptest_db_1 exited with code 0
为了解决这个问题,我尝试添加tty: true
,但这没有意义。相同的输出。如何通过docker-compose保持我的容器存活? Here我找到了tail -F anything
。它有效,但看起来很糟糕。还有更好的方法吗?
更新:我住在tail -F '/var/log/sqlserver.out'