Изменить размер Docker-контейнера SQL Server

Я хочу решить проблемы с памятью, которые возникают у моего контейнерного SQL Server. Я использую это в Windows 10 версии 1709.

Для тестирования я создал контейнер SQL Server с помощью этой команды:

docker run -d -p 1433:1433 --name sql1 -e SA_PASSWORD=1Secure*Password1 
-e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer:2017-latest

В этом контейнерном экземпляре SQL я создал базу данных, которая работала до тех пор, пока не стала слишком большой. Я получаю ошибки нехватки памяти. Например, когда я запускаю запрос в SSMS, я получаю сообщение «Недостаточно системной памяти в пуле ресурсов по умолчанию для выполнения этого запроса». Точно так же, когда я проверяю кольцевой буфер SQL Server, я вижу RESOURCE_MEMPHYSICAL_LOW. Когда я получаю эти ошибки, используется только 8 гигабайт из доступных 16 гигабайт оперативной памяти моего ноутбука. Так что это не проблема с реальной физической памятью.

Docker для Windows в Windows 10 запускает контейнеры на виртуальной машине Hyper-V, для которой по умолчанию установлено 1 ГБ ОЗУ. Я могу подтвердить это, запустив свой контейнер, а затем войдя с ним в интерактивный режим:

PS C:\repos\somefolder> docker exec -it sql1 powershell

В интерактивном режиме, следуя этот другой пример SO, я вижу следующие результаты:

PS C:\> systeminfo | findstr "Memory"
Total Physical Memory:     1,023 MB
Available Physical Memory: 221 MB
Virtual Memory: Max Size:  1,023 MB
Virtual Memory: Available: 82 MB
Virtual Memory: In Use:    941 MB

Кроме того, когда я запускаю docker stats, я вижу, что мой контейнер sql1 использует PRIV WORKING SET в диапазоне от 750 МБ до 970 МБ.

Итак, я четко подтвердил, что у меня есть ограничение на виртуальную машину Hyper-V в 1 ГБ, которое мне нужно поднять.

Как мне это сделать, не потеряв базу данных, которая находится внутри этого контейнера? Я вижу ответ, в котором написано опция "использовать -m", но я думаю, что это работает только при первом создании контейнера.

Версия Докера

$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:48 2018
 OS/Arch:      windows/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.24)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:21:42 2018
  OS/Arch:      windows/amd64
  Experimental: false
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
1 077
1

Ответы 1

Образы SQL Server позволяют подключать базы данных в формате JSON, заданном как переменная среды attach_dbs.

Я сделал что-то вроде этого:

# escape=` 

FROM microsoft/mssql-server-windows-express:2017-GA 

LABEL MAINTAINER = "Seba Gómez @sebagomez"

# SQL Databases
COPY data\ c:/data
ENV attach_dbs = "[{'dbName':'MyDB','dbFiles':['C:\\data\\MyDB.mdf','C:\\data\\MyDB_log.ldf']}, {'dbName':'MyOtherDB','dbFiles':['C:\\data\\MyOtherDB.mdf','C:\\data\\MyOtherDB_log.ldf']}]" `
    ACCEPT_EULA=Y `
    sa_password = "dbPassword!"

Все файлы mdf и ldf находятся в папке data рядом с моим файлом dockerfile.

Другие вопросы по теме