Ненулевой код контейнера SQL Server для подключения к Docker: 1

Я пытаюсь создать контейнер SQL Server из docker-compose.yml, но когда я запускаю его, он сразу останавливается с некоторыми ошибками. Примечание: он работает на чипе Apple M1 с Docker Preview.

докер-compose.yml:

version: "3.7"
services:
  sql-server-db:
    container_name: sql-server-db
    image: mcr.microsoft.com/mssql/server:2019-latest
    ports: 
      - "1433:1433"
    environment: 
      SA_PASSWORD: "ApplePassDockerConnect"
      ACCEPT_EULA: "Y"

Ошибки, которые я получаю:

SQL-сервер-БД | /opt/mssql/bin/sqlservr: Недопустимое сопоставление адреса 0x40092b8000 в зарезервированном адресном пространстве ниже 0x400000000000. Возможные причины:

SQL-сервер-БД | 1) процесс (сам или через оболочку) запускает свою собственную рабочую среду, устанавливает ограничение размера стека на неограниченный через системный вызов setrlimit(2);

SQL-сервер-БД | 2) процесс (сам или через оболочку) настраивает свой собственный домен выполнения и помечает систему своей устаревшей личностью через личность системного вызова (2);

SQL-сервер-БД | 3) системный администратор намеренно настраивает систему на работу в устаревшем режиме макета виртуального устройства, настраивая ручку sysctl vm.legacy_va_layout.

SQL-сервер-БД |

sql-server-db завершился с кодом 1


person mrtn    schedule 21.12.2020    source источник


Ответы (2)


Вы не можете использовать контейнеры mcr.microsoft.com/mssql/server:2019-latest на M1, потому что БД MSSQL не поддерживает архитектуру ARM. Единственный способ, который я нашел, — это использовать контейнер Azure SQL, который поддерживает ARM и может работать на M1.

Вот мой пример конфигурации docker-compose.yml:

version: "3.9"

services:
    # Database instance
    mssql:
      image: mcr.microsoft.com/azure-sql-edge:latest
      volumes:
        - events_mssql:/var/opt/mssql
      ports:
        - 1433:1433
      environment:
        - ACCEPT_EULA=1
        - MSSQL_SA_PASSWORD=Passw@rd

volumes:
    events_mssql:

Вы сможете подключиться к этой БД, используя имя пользователя: sa, пароль: Passw@rd и базу данных: master. Если вам нужно другое имя базы данных, вы можете создать новое с использованием SQL: CREATE DATABASE TestDB

Эта база данных имеет тот же API, что и база данных MSSQL, поэтому она работает с библиотеками pyodbc (не поддерживается в M1) и pymssql.

Если вы используете его локально на своем компьютере M1, рассмотрите возможность использования библиотеки pymssql для подключения к базе данных SQL Azure. Вот мой ответ по проблеме с pyodbc https://stackoverflow.com/a/66919686/11515610

person Богдан Михайлович    schedule 02.04.2021
comment
Я не думаю, что приведенный вами пример yml правильно построен. - person Eric; 15.04.2021
comment
@ Эрик, что именно не работает? Какая у вас ошибка? - person Богдан Михайлович; 15.04.2021
comment
Отступ, кажется, выключен. Но ладно, мне это больше не нужно. Я переключаюсь на postgres, и я смог сделать эту работу. - person Eric; 15.04.2021
comment
@ Эрик, да, ты прав. Я не копировал ключ services: поверх файла. Исправлено сейчас - person Богдан Михайлович; 15.04.2021
comment
Я попробовал это для тестового проекта на моем Mac M1, и он работал нормально. - person Tarun Parmar; 21.04.2021
comment
использование переменных среды Docker в файле .sql мне не подходит. Является ли $(MSSQL_DB) правильным форматом? - person keligijus; 23.04.2021
comment
@keligijus ты прав. Я только что понял, что этот скрипт не работает в контейнере Azure и предназначен для контейнера mssql. Я обновил ответ и добавил рецепт, как создать другую БД в контейнере Azure. - person Богдан Михайлович; 29.04.2021
comment
Кстати, в репозитории GitHub идет обсуждение относительно поддержки архитектуры ARM база данных mssql - person Богдан Михайлович; 29.04.2021

Так что... это может быть не связано с вашей конкретной проблемой. У меня есть ощущение, что это не исправит это для вас, потому что ваша проблема звучит намного ниже (как вы подозреваете), но это того стоит.

Я попытался скопировать и вставить ваш точный файл docker-compose и запустить его на своем компьютере (рабочий стол Windows), я также получаю exited with code 1.

Единственное, что, казалось, исправило это, это использование более сложного пароля.

Я проверял это несколько раз подряд... Я проверял ваш пароль, и он не удался. Я проверил сложный пароль, и он работал нормально.

Поэтому я предлагаю использовать более сложный пароль. Пароль, который я тестировал, был 6Xy3LkV7!9lo2^h

person Chad Baldwin    schedule 21.12.2020
comment
это не решило проблему, но спасибо за ваше предложение - person mrtn; 24.12.2020