首页 > 解决方案 > 无法访问 dockerized mssql 服务器

问题描述

我正在尝试对两个 .net core 3.1 服务(my-api 和 my-db)进行 dockerize。my-db 服务正在使用 mssql 数据库,我正在使用下面的脚本在容器启动后立即创建实际的 db inside 容器

docker-compose up --build

服务已启动并正在运行,但是当我使用 api 服务访问 db 时,出现错误使用连接到服务器“my-db”上的数据库“mydatabase”时发生错误。

码头工人-compose.yml

version: '3.0' 
services:
  my-db:
    build: ./Data/Docker
  my-api:
    ports: 
      - "8080:5000"         
    depends_on: 
      - my-db
   ... ommited for clarity

数据/码头工人

FROM mcr.microsoft.com/mssql/server:2017-CU17-ubuntu
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app    
COPY . /usr/src/app    
RUN chmod +x /usr/src/app/run-initialization.sh    
ENV SA_PASSWORD pass
ENV ACCEPT_EULA Y
ENV MSSQL_PID Express    
EXPOSE 1433    
CMD /bin/bash ./entrypoint.sh

入口点.sh

/usr/src/app/run-initialization.sh & /opt/mssql/bin/sqlservr

运行初始化.sh

/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P pass -d master -i create-database.sql

创建数据库.sql

CREATE DATABASE [mydatabase] 
GO
USE [mydatabase]
GO

标签: sql-serverdocker.net-core

解决方案


改成entrypoint.sh这样

/opt/mssql/bin/sqlservr & sleep 10 & /usr/src/app/run-initialization.sh
  • /opt/mssql/bin/sqlservr启动 SQL 服务器
  • sleep 10等待 10 秒
  • /usr/src/app/run-initialization.sh执行 run-initialization.sh,它连接到 SQL Server 并创建一个数据库。

推荐阅读