[root@localhost ~]#docker pull microsoft/mssql-server-linux
[root@localhost ~]#docker images
[root@localhost ~]# docker run --name mssql -e'ACCEPT_EULA=Y' -e 'SA_PASSWORD=密码' -p 1433:1433 --restart=always -d microsoft/mssql-server-linux #创建并运行容器
[root@localhost ~]# docker ps #
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a1c3d38e3bc docker.io/microsoft/mssql-server-linux "/opt/mssql/bin/sq..." 8 seconds ago Up 7 seconds 0.0.0.0:1433->1433/tcp mssql
411b83037ad8 portainer/portainer "/portainer" 2 hours ago Up About an hour 0.0.0.0:9000->9000/tcp prtainer
[root@localhost ~]# docker exec -it mssql /bin/bash #登入容器
root@baf42971d6d9:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P '数据库密码' #
1> CREATE DATABASE test
2> go
1> exit
root@fc9e20f84879:/# mkdir /var/opt/mssql/backup #在容器内创建数据库备份文件目录
root@fc9e20f84879:/# exit
[root@localhost ~]# sudo docker cp /var/opt/mssql/bak/数据库备份文件.bak mssql:/var/opt/mssql/backup #在宿主把.bak备份文件复制到容器
#进容器看看bak文件是否cp进去了。
[root@localhost ~]# docker exec -it mssql01 /bin/bash
root@baf42971d6d9:/# ll /var/opt/mssql/backup
total 179284
drwxr-xr-x. 2 root root 45 Mar 21 17:59 ./
drwxr-xr-x. 7 root root 73 Mar 21 17:51 ../
-rw-r--r--. 1 root root 183585280 Mar 12 15:00 数据库备份文件.bak
root@baf42971d6d9:/#
[root@localhost ~]# sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '数据库密码' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/数据库备份文件.bak"' | tr -s ' ' | cut -d ' ' -f 1-2 #运行sqlcmd到逻辑文件名称和备份内的路径的列表容器内
LogicalName PhysicalName #运行结果
-------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MyHotel_dat G:\DATA\myhotel.mdf
MyHotel_log G:\DATA\myhotel.ldf
(2 rows
[root@localhost bak]# sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '数据库密码' -Q 'RESTORE DATABASE 'myhotel' FROM DISK = "/var/opt/mssql/backup/数据库备份文件.bak" WITH MOVE "MyHotel_dat" TO "/var/opt/mssql/myhotel.mdf", MOVE "MyHotel_log" TO "/var/opt/mssql/data/myhotel.ldf"' #还原数据库
此处省略。。
Database 'myhotel' running the upgrade step from version 868 to version 869.
RESTORE DATABASE successfully processed 22313 pages in 3.375 seconds (51.650 MB/sec).
还原完毕。
[root@localhost ~]# docker top mssql
UID PID PPID C STIME TTY TIME CMD
root 12667 12650 0 01:47 ? 00:00:00 /opt/mssql/bin/sqlservr
root 12693 12667 3 01:47 ? 00:00:56 /opt/mssql/bin/sqlservr
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 7.6G 1.6G 4.3G 10M 1.8G 5.7G
Swap: 9.3G 0B 9.3G
[root@localhost ~]#
[root@localhost bak]# docker exec -it mssql /bin/bash #登入容器
root@4a1c3d38e3bc:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U Sa -P '数据库密码' #连接数据库
1> CREATE DATABASE myhotel #创建数据库
2> go
1> drop database testDB #删除数据库
4> go
1>
docker run --name portainer -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -d docker.io/portainer/portainer
问题一:
运行mssql容器后不到十秒就自动停止了。
试过重启
还有检查命令发现多了句 -d=false
问题二:
[root@localhost ~]# sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '数据库密码' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/数据库备份文件.bak"' | tr -s ' ' | cut -d ' ' -f 1-2
Msg 3201,
Cannot open
Msg 3013,
RESTORE FILELIST
#出现此错误,我发现是因为容器内没有目录导致,因为我mkdir是在 [root@localhost ~]# 宿主机上建立的,应该要在容器内mkdir才对,还有最后CP完后进容器看看是否有bak文件。
问题三:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..