Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

449
Views
Run sqlcmd in Dockerfile

Is it possible to run sqlcmd inside a dockerfile?

First I am creating a layer

FROM microsoft/mssql-server-windows-developer:2017-latest

After that I accept the eula and set the sa password like this:

ENV ACCEPT_EULA=Y

ENV SA_PASSWORD=VerySecret!

After doing so I am trying to execute a simple sample query:

RUN sqlcmd -S "localhost" -U "SA" -P "VerySecret!" -Q "select name from master.dbo.sysdatabases"

Unfortunately the docker build command breaks with the error message "Sqlcmd: 'name from master.dbo.sysdatabases': Unexpected argument. Enter '-?' for help."

Am I doing something wrong?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

The MS SQL containers can have SQL statements run against them inside a dockerfile that uses them.

I think your problem is just that double quotes are being stripped from your RUN command.

I couldn't quite decide if its a bug based on this github issue but escaping them as \" will work around it.

You can also avoid setting the SA password in your docker file by defaulting to a trusted connection:

run sqlcmd -Q \"select name from master.dbo.sysdatabases\"

This way the variables can be set at container run time like this:

docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=bobleponge -p 1433:1433 <imageid>
over 4 years ago · Santiago Trujillo Report

0

To interactively run Microsoft SQL server from the shell.

docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa

It will prompt for a password.

"sql1" is the name of the instance. Change this with container id if it has not been named.

1>
over 4 years ago · Santiago Trujillo Report

0

It’s not possible to connect to databases inside a Dockerfile.

Think of the Dockerfile like a javac or cc or make command. It produces a binary image; once you’ve built that image, you can run it on several different hosts. You can very easily imagine workflows like deleting and recreating the database without rebuilding the image, or pushing and pulling the image onto a different host with a different database, where these setup steps haven’t run.

The usual approach here is to configure your container to run database migrations as part of its startup sequence, possibly with a custom entrypoint script. The stock database images also come with a mechanism to run an SQL script when a container is first created, which you can use to create an empty database for your application.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!