我正在尝试在 Docker SQL Server 映像上运行安装脚本
为此,我从 mssql 映像创建了一个 Dockerfile
FROM microsoft/mssql-server-linux:2017-CU8
# Create directory to place app specific files
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Copy setup scripts
COPY entrypoint.sh \
./
RUN chmod +x ./entrypoint.sh
CMD /bin/bash ./entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
在entrypoint.sh我启动 SQL Server 时,我想运行一些安装命令。
#!/bin/bash
#start SQL Server
/opt/mssql/bin/sqlservr &
echo 'Sleeping 20 seconds before running setup script'
sleep 20s
echo 'Starting setup script'
#run the setup script to create the DB and the schema in the DB
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <MyPassWd> -d master -i setup.sql
echo 'Finished setup script'
Run Code Online (Sandbox Code Playgroud)
当我运行这个脚本时,数据库启动,安装运行,安装完成后,容器关闭。
所以我认为脚本中的某些内容会使容器关闭,因此我将脚本精简到最低限度
#!/bin/bash
#start SQL Server
/opt/mssql/bin/sqlservr &
echo 'Sleeping 20 seconds before running setup script'
sleep 20s
Run Code Online (Sandbox Code Playgroud)
这也会在之后停止容器 sleep 20s完成。
继续...
#!/bin/bash
#start SQL Server
/opt/mssql/bin/sqlservr &
Run Code Online (Sandbox Code Playgroud)
立即停止容器
进而...
#!/bin/bash
#start SQL Server
/opt/mssql/bin/sqlservr
Run Code Online (Sandbox Code Playgroud)
现在容器运行了,但是我不能做任何初始化
有人知道如何让这个工作吗?
小智 9
把sql server的密码改得够复杂。
docker run -d -p 1433:1433 -e "sa_password=ComplexPW2019!" -e "ACCEPT_EULA=Y" <sqlserverimageid>
Run Code Online (Sandbox Code Playgroud)
小智 2
此问题的根本原因是 docker 容器的 PID 1 分配。
PID 1 将分配给 Dockerfile 中 CMD 给出的命令(在我们的例子中为 ./entrypoint.sh)
根据 PID 1,容器有生命垃圾邮件(一旦 PID 1 停止/被杀死的容器将被停止)
1) 如果是 /opt/mssql/bin/sqlservr ,
子进程 ID 将分配给 sqlserver cmd 并在后台执行,一旦执行了脚本的其余部分,容器将停止。
2) 如果是 /opt/mssql/bin/sqlservr
脚本将不会从此处继续执行,直到执行完成。
因此解决方案是将 PID 1 分配给 CMD /opt/mssql/bin/sqlservr 并且脚本的其余部分应作为子进程执行。
我做了以下更改,它对我有用。
在 Dockerfile 中
replace CMD /bin/bash ./entrypoint.sh to CMD exec /bin/bash entrypoint.sh
在入口点.sh
#!/bin/bash
#start SQL Server
sh -c "
echo 'Sleeping 20 seconds before running setup script'
sleep 20s
echo 'Starting setup script'
#run the setup script to create the DB and the schema in the DB
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P \"YourStrong!Passw0rd\" -Q
\"ALTER LOGIN SA WITH PASSWORD='NewStrong!Passw0rd'\"
echo 'Finished setup script'
exit
" &
exec /opt/mssql/bin/sqlservr
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |