У меня есть файл Docker, куда я импортирую две базы данных.
FROM mcr.microsoft.com/mssql/server
RUN mkdir -p /var/opt/mssql/backup
COPY clean_SCManager.bak /var/opt/mssql/backup/SCManager.bak
COPY clean_SCServer.bak /var/opt/mssql/backup/SCServer.bak
COPY SCManager-setup.sql /var/opt/mssql/SCManager-setup.sql
COPY startup.sh /var/opt/mssql/startup.sh
ENV MSSQL_SA_PASSWORD=P@ssw0rd
ENV ACCEPT_EULA=Y
RUN chmod +x /var/opt/mssql/startup.sh
CMD /var/opt/mssql/startup.sh
EXPOSE 1433
Теперь я хочу вставить некоторые значения в одну из моих баз данных, для этого я использую файл SQL, который содержит команду INSERT INTO
.
USE SCManager;
GO
INSERT INTO epls_dbo.Account("uid", "login", "password_hash", "lastLogin", "failedLogins", "locked", "role", "locale", "accountPenIdUid")
VALUES (4294967306, 'sysadm', '2398ef2774cd07f31037e9347de3e660', '2017-09-12 14:50:35.607', 0, 'False', 'Admin', 'en_US', NULL);
Этот SQL будет вызываться скриптом bash, в этом я использую sqlcmd
для выполнения скрипта SQL.
#/bin/bash
echo "startup.sh is called, starting sqlserver"
/opt/mssql/bin/sqlservr &
echo "start sleeping for 20 seconds"
sleep 20
echo "sleeping done"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/SCServer.bak'"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/SCManager.bak'"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE DATABASE SCManager FROM DISK = '/var/opt/mssql/backup/SCManager.bak' WITH MOVE 'SCManager' TO '/var/opt/mssql/data/SCManager.mdf', MOVE 'SCManager_log' TO '/var/opt/mssql/data/SCManager_log.ldf'"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -Q "RESTORE DATABASE SCServer FROM DISK = '/var/opt/mssql/backup/SCServer.bak' WITH MOVE 'SCServer' TO '/var/opt/mssql/data/SCServer.mdf', MOVE 'SCServer_log' TO '/var/opt/mssql/data/SCServer_log.ldf'"
sleep 10
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -d SCManager -P "P@ssw0rd" -i "/var/opt/mssql/SCManager-setup.sql"
tail -f /dev/null
Когда я запускаю образ докера, я вижу в журналах, что база данных была импортирована и что файл sql был выполнен, но sql не был успешно выполнен
Changed database context to 'SCManager'.
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'uid.
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'логин'.
Сообщение 207, уровень 16, состояние 1, сервер fb5db2041be5, строка 4
Неверное имя столбца 'пароль_хэш'.
Msg 207, уровень 16Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'lastLogin'.
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'failedLogins'.
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Недопустимое имя столбца «заблокировано».
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'роль'.
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, строка 4
Неверное имя столбца 'locale'.
Сообщение 207, Уровень 16, Состояние 1, Сервер fb5db2041be5, Строка 4
Неверное имя столбца 'accountPenIdUid'.
Когда я подключаюсь к работающему док-контейнеру, я могу запроситьбаза данных, таким образом, база данных доступна и таблица, которую я хочу вставить в выходы
root@fb5db2041be5:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd" -d SCManager -Q "select * from epls_dbo.Account"
uid login password_hash lastLogin failedLogins locked role
locale accountPenIdUid
-------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------- ----------------------- ------------ ------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ --------------------
(0 rows affected)
Также я могу выполнить в bash мою команду вставки в команду, она правильно вставляет значения, почему это не работаетпозвонив из моего скрипта bash?