Sql server Docker COPY命令不支持';I don’我好像没有把文件复制到WORKDIR上

Sql server Docker COPY命令不支持';I don’我好像没有把文件复制到WORKDIR上,sql-server,linux,windows,docker,containers,Sql Server,Linux,Windows,Docker,Containers,我一直在尝试在Docker中运行SQL Server 2017,并在其中恢复备份。 我能够运行SQL server,但似乎无法成功恢复备份。 我没有得到任何错误。我试图通过以下方式进行调查: docker exec -it 44327a4ce101 sh 我的桌面上的文件: 正如您所看到的,docker容器中的tmp文件夹是空的。但是为什么呢 Dockerfile: FROM mcr.microsoft.com/mssql/server:2017-latest AS BUILD E

我一直在尝试在Docker中运行SQL Server 2017,并在其中恢复备份。 我能够运行SQL server,但似乎无法成功恢复备份。 我没有得到任何错误。我试图通过以下方式进行调查:

docker exec -it 44327a4ce101  sh   

我的桌面上的文件:

正如您所看到的,docker容器中的tmp文件夹是空的。但是为什么呢

Dockerfile:

FROM mcr.microsoft.com/mssql/server:2017-latest AS BUILD
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=Pwd12345!

WORKDIR /tmp
COPY AdventureWorksLT2017.bak .
COPY restore-backup.sql .

RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Pwd12345!" -i /tmp/restore-backup.sql \
    && pkill sqlservr

FROM mcr.microsoft.com/mssql/server:2017-latest AS RELEASE

ENV ACCEPT_EULA=Y
COPY --from=build /var/opt/mssql/data /var/opt/mssql/data
还原备份.sql

RESTORE DATABASE [AdventureWorks] FROM DISK = '/tmp/AdventureWorksLT2017.bak'
WITH FILE = 1, 
MOVE 'AdventureWorksLT2012_Data' TO '/var/opt/mssql/data/AdventureWorks.mdf',
MOVE 'AdventureWorksLT2012_Log' TO '/var/opt/mssql/data/AdventureWorks.ldf',
NOUNLOAD, REPLACE, STATS = 5

GO

RESTORE FILELISTONLY FROM DISK = 'C:\Temp\docker\AdventureWorksLT2017.bak'

您正在运行多阶段构建。每个阶段构建一个单独的映像,您可以使用显式复制命令在阶段之间复制工件。它不会将多个图像合并在一起


因此,您复制到构建阶段而未复制到发布阶段的文件不应位于基于该发布映像的容器中。

您已将文件复制到构建阶段。您构建/运行了哪个阶段?请尝试
运行cd/tmp
而不是
workdir/tmp
,或者直接复制到
/tmp
而不是
@BMitch结束阶段。@SoftwareEngineer您的意思是替换
复制AdventureWorksLT2017.bakCOPY AdventureWorksLT2017.bak./tmp
不,我的意思是用
COPY AdventureWorksLT2017.bak/tmp
替换它——区别在于
/tmp
之前。我想你是对的。当我调查在
COPY restore-backup.sql
之后创建的映像时,我可以看到这两个文件。我的问题越来越复杂。我将
COPY AdventureWorksLT2017.bak.
更改为
COPY AdventureWorksLT2017.bak/tmp
,但我一直收到“登录超时已过期”。即使我将其更改回原来的状态。I@SamuraiJack我没有任何使用Windows容器或MS SQL的经验,因此在这方面我无法提供任何帮助。只是想帮助你理解最初提出的问题,问题解决了。我使用'docker run-e“ACCEPT_EULA=Y”-e“SA_PASSWORD=Pwd12345!”-p 11433:1433-d mcr.microsoft.com/mssql/server:2017 latest`运行容器,然后使用'docker run-e“ACCEPT_EULA=Y”-e“SA_PASSWORD=Pwd12345!”-p 11433:1433-d还原的db`我仍然不知道为什么要更改
COPY AdventureWorksLT2017.bak
复制AdventureWorksLT2017.bak/tmp将导致sql登录超时。大约一个小时后,它会自动自行解决。谢谢您的帮助。用于解释该文件夹为何为空+1.