Cannot find the SQL Server binary in Docker Container

nvbavucw  于 2023-10-15  发布在  SQL Server
关注(0)|答案(1)|浏览(93)

I am trying to build a custom image for SQL Server and need to apply some initialization scripts and data migrations before the application connects to it. So I searched for this in the official docs but I am facing a weird problem, where my entrypoint.sh file is not able to find the sqlservr binary. This is my Dockerfile

FROM mcr.microsoft.com/mssql/server:2022-latest

USER root
WORKDIR /usr/src/app

# Copy the entrypoint.sh and migrations.sh files for running all the required migrations 
COPY . .

# Setup the environment for the mssql container
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=testPass#1234
ENV MSSQL_PID=Developer

# Expose the port 1433 for other services 
EXPOSE 1433

# Make both the files executable
RUN chmod +x ./entrypoint.sh 
RUN chmod +x ./migrations.sh
RUN chmod +x /opt/mssql/bin/sqlservr

# CMD "/bin/bash"
ENTRYPOINT ["/bin/bash", "./entrypoint.sh"]

This is my entrypoint.sh file

echo "********************************* Started SQL Server Image *********************************"
/opt/mssql/bin/sqlservr

This is my docker run output

[+] Building 0.2s (11/11) FINISHED                                                                                                                                           docker:default
 => [internal] load .dockerignore                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                        0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                   0.0s
 => => transferring dockerfile: 618B                                                                                                                                                   0.0s
 => [internal] load metadata for mcr.microsoft.com/mssql/server:2022-latest                                                                                                            0.0s
 => [1/6] FROM mcr.microsoft.com/mssql/server:2022-latest                                                                                                                              0.0s
 => [internal] load build context                                                                                                                                                      0.0s
 => => transferring context: 97B                                                                                                                                                       0.0s
 => CACHED [2/6] WORKDIR /usr/src/app                                                                                                                                                  0.0s
 => CACHED [3/6] COPY . .                                                                                                                                                              0.0s
 => CACHED [4/6] RUN chmod +x ./entrypoint.sh                                                                                                                                          0.0s
 => CACHED [5/6] RUN chmod +x ./migrations.sh                                                                                                                                          0.0s
 => CACHED [6/6] RUN chmod +x /opt/mssql/bin/sqlservr                                                                                                                                  0.0s
 => exporting to image                                                                                                                                                                 0.0s
 => => exporting layers                                                                                                                                                                0.0s
 => => writing image sha256:a9ff35832dec4ba79f8ca2d36580ddef2d13d221f646068eaa896dc2d165b921                                                                                           0.0s
 => => naming to docker.io/library/todo-db                                                                                                                                             0.0s
database-test
********************************* Started SQL Server Image *********************************
: No such file or directorypt/mssql/bin/sqlservr
qvk1mo1f

qvk1mo1f1#

As suggested in the comments the problem was in the file endings being CRLF instead of LF. Posting this answer for anyone who stumbles upon the same problem.

Updated Dockerfile

FROM mcr.microsoft.com/mssql/server:2022-latest

USER root
WORKDIR /usr/src/app

# Install dos2unix functionality for converting CRLF file endings to LF
RUN apt-get update && \
    apt-get install -y dos2unix && \
    apt-get clean

# Copy the entrypoint.sh and migrations.sh files for running all the required migrations 
COPY . .

# Setup the environment for the mssql container
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=testPass#1234
ENV MSSQL_PID=Developer

# Expose the port 1433 for other services 
EXPOSE 1433

# Convert all the file endings
RUN dos2unix ./entrypoint.sh
RUN dos2unix ./migrations.sh

# Make both the files executable
RUN chmod +x ./entrypoint.sh 
RUN chmod +x ./migrations.sh

USER mssql

CMD ["./entrypoint.sh"]

相关问题