【问题标题】:Cannot access to dockerized mssql server无法访问 dockerized mssql 服务器
【发布时间】:2021-01-03 08:41:28
【问题描述】:

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

docker-compose up --build

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

docker-compose.yml

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

数据/Docker

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

entrypoint.sh

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

run-initialization.sh

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

create-database.sql

CREATE DATABASE [mydatabase] 
GO
USE [mydatabase]
GO

【问题讨论】:

  • SQL server 服务启动需要一些时间,所以我建议您在尝试连接到 run-initialization.sh 中的数据库之前添加 10 秒的睡眠时间
  • 有意义,尝试使用 /opt/mssql-tools/bin/sqlcmd sleep 10 -S localhost -U sa -P pass -d master -i create-database.sql 但我有同样的问题。我在这里做错了吗?

标签: sql-server docker .net-core


【解决方案1】:

像这样更改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 并创建一个数据库。

【讨论】:

    【解决方案2】:

    你有什么连接字符串?

    据我所知,在您的情况下,它需要将 dbserver 名称与您的 db 名称匹配: 我的数据库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2019-12-09
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多