1

When I want to connect to SQL Server instance running in Docker container, I'm getting following error:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

SQL Dockerfile:

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

USER root

RUN mkdir /var/opt/sqlserver
RUN mkdir /var/opt/sqlserver/sqldata
RUN mkdir /var/opt/sqlserver/sqllog
RUN mkdir /var/opt/sqlserver/sqlbackups

RUN chown -R mssql /var/opt/sqlserver

USER mssql

CMD /opt/mssql/bin/sqlservr

docker-compose:

version: '3.7'

networks:
  personal-money-tracker-network:
    driver: bridge

services:

  api:
    container_name: personal-money-tracker-api
    image: ${DOCKER_REGISTRY-}personalmoneytrackerapi
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_CONNECTION_STRING=PersonalMoneyTrackerDbDocker
      - ASPNETCORE_URLS=https://+:443;http://+:80
    networks:
      - personal-money-tracker-network
    build:
      context: .
      dockerfile: ./server/PersonalMoneyTracker.API/Dockerfile
    depends_on:
      - db
    ports:
      - "8000:80"
      - "8001:443"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${USERPROFILE}\.aspnet\https:/root/.aspnet/https:ro

  client:
    container_name: personal-money-tracker-client
    stdin_open: true
    image: ${DOCKER_REGISTRY-}personalmoneytrackerclient
    build:
      context: .
      dockerfile: ./client/Dockerfile.prod
    environment:
      - NODE_ENV=production
      - CHOKIDAR_USEPOLLING=true
      - VITE_API_URL=https://localhost:8001
    networks:
      - personal-money-tracker-network
    ports:
      - "3000:3000"
    depends_on:
      - api
    volumes:
      - node-modules:/app/node_modules
      - ./PersonalMoneyTracker.Client/personal-money-tracker:/app

  db:
    container_name: personal-money-tracker-db
    image: ${DOCKER_REGISTRY-}personalmoneytrackerdb
    ports:
      - "1401:1433"
    build:
      context: .
      dockerfile: ./devops/sql/Dockerfile
    env_file:
      - ./devops/sql/SqlServer.env
    networks:
      - personal-money-tracker-network
    volumes:
      - sqlsystem:/var/opt/mssql/
      - sqldata:/var/opt/sqlserver/sqldata
      - sqllog:/var/opt/sqlserver/sqllog
      - sqlbackup:/var/opt/sqlserver/sqlbackups

volumes:
  node-modules:
  sqlsystem:
  sqldata:
  sqllog:
  sqlbackup:

SQL .env file:

MSSQL_SA_PASSWORD=Testing1122!
ACCEPT_EULA=Y
MSSQL_AGENT_ENABLED=True
MSSQL_DATA_DIR=/var/opt/sqlserver/sqldata
MSSQL_LOG_DIR=/var/opt/sqlserver/sqllog
MSSQL_BACKUP_DIR=/var/opt/sqlserver/sqlbackups
MSSQL_PID='Developer'
MSSQL_TCP_PORT=1401

Funny thing - everything worked with this configuration until I had to kill WSL in order to shring volume and change CPU/RAM resource (.wslconfig) but I cannot see why that should be connected. I'm getting the same error when I try to connect from SSMS or Azure Data Studio.

Rade Tomovic
  • 298
  • 2
  • 14

1 Answers1

0

So the issue was related to already running SQL service instance on port 1433 while trying to activate Docker on the same external port.If you bump into similar issue, you can be check ports with TCPView (screenshot below).

TCP view data

You can kill process and then run container and everything will work like a charm.

Rade Tomovic
  • 298
  • 2
  • 14