Я пытаюсь создать собственное изображение Docker с помощью MSSQL DB для разработки. Он основан на изображении microsoft/mssql-server-linux
. Во время сборки я хочу скопировать некоторые .sql
файлы в контейнер, а затем запустить эти сценарии (для создания схем БД, таблиц, вставки некоторых данных и т.д.). Мой Dockerfile
выглядит так:
# use MSSQL 2017 image on Ubuntu 16.04
FROM microsoft/mssql-server-linux:2017-latest
# create directory within SQL container for database files
RUN mkdir -p /opt/mssql-scripts
# copy the database files from host to container
COPY sql/000_create_db.sql /opt/mssql-scripts
# set environment variables
ENV [email protected]
ENV ACCEPT_EULA=Y
# run initial scripts
RUN /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '[email protected]' -i /opt/mssql-scripts/000_create_db.sql
Содержание 000_create_db.sql
не важно, на мой взгляд.
Реальная проблема заключается в том, когда я пытаюсь создать этот Dockerfile
с Dockerfile
команды docker build -t demo.
Я всегда получаю эти ошибки:
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : TCP Provider: Error code 0x2749.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Но когда я удаляю последнюю команду (запускаю исходные скрипты), создаю и запускаю образ и вызываю ту же команду:
docker build -t demo .
docker run -p 1433:1433 --name mssql -d demo
docker exec -it mssql "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '[email protected]' -i /opt/mssql-scripts/000_create_db.sql
Тогда все идет хорошо. Почему я не могу запустить скрипт из Dockefile
?