Docker Команда COPY, похоже, не копирует файлы в WORKDIR - PullRequest
0 голосов
/ 29 марта 2020

Я пытался запустить SQL Server 2017 внутри Docker, а также восстановить в нем резервную копию. Я могу запустить сервер SQL, но мне кажется, что я не могу успешно восстановить резервную копию. Я не получаю никаких ошибок. Я пытался исследовать с:

docker exec -it 44327a4ce101  sh   

enter image description here

Файлы на моем рабочем столе:

enter image description here

Как видите, папка tmp пуста внутри контейнера docker. Но почему?

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'

1 Ответ

1 голос
/ 29 марта 2020

Вы используете многоэтапную сборку. Каждый этап создает отдельное изображение, и вы можете копировать артефакты между этапами с помощью явной команды копирования. Он не объединяет несколько изображений вместе.

Таким образом, файлы, которые вы скопировали на этапе BUILD, которые вы не копируете на этап RELEASE, не должны находиться в контейнерах на основе этого изображения RELEASE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...