Это не настоящий ответ, но слишком длинный для комментария, так что ...
Существует две версии контейнера mssql: Windows и Linux. Вы используете контейнер Windows, в то время как контейнеры Linux более распространены. Вот почему многие примеры в Интернете не будут работать, как ожидалось.
В вашем первом примере кажется, что вы используете путь, используемый mssql для Linux (/ var / opt - это типичный путь Linux). Итак, 1) найдите путь, который используется внутри вашего контейнера для хранения данных БД.
Ваш второй пример просто не действительный yaml. Синтаксис key: value, поэтому ваша строка attach_db недопустима.
Из документов:
ENV attach_dbs='[{"dbName":"mydb","dbFiles":["C:\\temp\\mydb.mdf","C:\\temp\\mydb.ldf"]}]'
Здесь мы видим, что это переменная окружения. Вы устанавливаете env vars следующим образом:
env:
attach_dbs: '[{"dbName":"mydb","dbFiles":["C:\\temp\\mydb.mdf","C:\\temp\\mydb.ldf"]}]'
Это должно исправить вашу ошибку разбора.
Чем вы должны прочитать о томах здесь: https://docs.docker.com/compose/compose-file/#volumes
Если вы укажете именованный том с отдельным разделом «тома», синтаксис name: path_inside_container.
Еще одно замечание: я бы пошел с контейнерами Linux. Вы найдете пункт меню «Переключиться на контейнеры Linux ...» в вашем Docker для меню Windows (значок в трее) Если это отключено, вам, возможно, придется установить Linux из магазина Microsoft (просто найдите ubuntu).