gpt4 book ai didi

sql-server - docker容器在bash命令和sql执行后死亡

转载 作者:行者123 更新时间:2023-12-02 19:23:07 24 4
gpt4 key购买 nike

最初,Docker容器可以正常启动,但是在schema.sql文件延迟执行后不久,它便断开连接并死亡。
entry-point.sh或以下命令行可能有问题。

command: bash -c "/opt/mssql/bin/sqlservr & chmod +x entry-point.sh && ./entry-point.sh"

docker-compose.sql
database:
image: microsoft/mssql-server-linux:2017-latest
container_name: database
ports:
- 1433:1433
volumes:
- /var/opt/mssql
- ./assets:/assets
working_dir: /assets
command: bash -c "/opt/mssql/bin/sqlservr & chmod +x entry-point.sh && ./entry-point.sh"
environment:
SA_PASSWORD: "Password"
ACCEPT_EULA: "Y"

entry-point.sh
#!/usr/bin/env bash

#wait for the SQL Server to come up
sleep 10s

#run the setup script to create the DB and the schema in the DB
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password -d master -i schema.sql

schema.sql
CREATE DATABASE DataDemo;
GO

USE DataDemo;
GO

编辑尝试了不同的方法,但是无法使用初始化脚本在docker中设置数据库。

编辑2

以下答案,加载程序给出了一个错误

enter image description here

最佳答案

command:完成后,容器立即退出。在您的情况下,您要启动一个后台进程,然后运行两个命令。一旦这两个命令完成,便完成了容器。后台进程是您实际上希望容器执行的操作无关紧要。

大多数标准数据库镜像都提供了一些方法来预填充应用程序数据。如果我找到了正确的Dockerfile,则Microsoft's SQL server images没有此功能。 (这样做的PostgreSQL entrypoint script相当复杂,我可能不会尝试自己复制它。)

一个简单的方法是在另一个容器中进行初始化。

version: '3'
services:
database:
image: microsoft/mssql-server-linux:2017-latest
ports:
- 1433:1433
volumes:
- /var/opt/mssql
environment:
SA_PASSWORD: "Password"
ACCEPT_EULA: "Y"
loader:
image: microsoft/mssql-tools:2017-latest
volumes:
- ./assets:/assets
command: /assets/entry-point.sh
restart: no
environment:
SA_HOST: database
SA_PASSWORD: Password

(您可以构建一个包含加载程序脚本的自定义镜像,而不是将其安装到容器中,并使用诸如 wait-for-it script这样更强大的功能来检查数据库是否正在运行。)

关于sql-server - docker容器在bash命令和sql执行后死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58315239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com