Docker + mssql-server-linux: How to launch .sql file during build (from Dockerfile)

后端 未结 3 1725
长情又很酷
长情又很酷 2021-02-02 11:05

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

相关标签:
3条回答
  • 2021-02-02 11:11

    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.

    0 讨论(0)
  • 2021-02-02 11:15

    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 
    
    0 讨论(0)
  • 2021-02-02 11:27

    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 
    
    0 讨论(0)
提交回复
热议问题