I am trying to create my own Docker image with MSSQL DB for development. It\'s based on microsoft/mssql-server-linux
image. During the build I want to copy some
When you build image main process is not running eat. In your case main process is SQL Server
.
Process will run only when you start container with command docker run ...
And you can make database initialization in this phase. microsoft/mssql-server-linux
Dockerfile
contains some tips
Copy all SQL Server runtime files from build drop into image. COPY ./install /
Just copy into build phase init scripts to ./install
dir and it will be executed into start phase.
I ended up using a slightly modified version of VDR's solution which waits for the sqlservr to start by checking the logs instead of sleeping 10 seconds:
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@ssw0rd' -i /opt/mssql-scripts/000_create_db.sql \
&& pkill sqlservr
From the mssql-server-linux dockerfile, looks like mssql is started on docker run, so you have to modify your last "RUN" command in your dockerfile to start sql-server in the background, run your sql file and stop the sql-server.
RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@ssw0rd' -i /opt/mssql-scripts/000_create_db.sql \
&& pkill sqlservr