Невозможно войти в SqlServer, запущенный в контейнере, запущенном через Docker -compose на виртуальной машине Ubuntu в Azure - PullRequest
0 голосов
/ 02 апреля 2020

Если я создаю и запускаю контейнер только с Dockerfile (без docker -compose)

sudo docker-compose up --build -d

, а затем запускаю его с:

sudo docker run  --hostname sqlserver -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=1StrongPwdclear" -p 1433:1433 -d sql 

Я могу

sqlcmd -S localhost -U sa -P 1StrongPwdclear

Но, когда я собираю и запускаю контейнер с docker -compose:

sudo docker-compose up --build

, я получаю:

Sqlcmd: Ошибка: Microsoft ODB C Драйвер 17 для SQL Сервер: Ошибка входа пользователя 'sa' ..

Я не понимаю, почему. Я имею в виду, что я практически использую один и тот же Dockerfile в обоих случаях.

Dockerfile:

FROM mcr.microsoft.com/mssql/server:2017-latest AS build
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=1StrongPwdclear

WORKDIR /tmp
COPY AdventureWorksLT2017.bak .
COPY restore-backup.sql .


FROM mcr.microsoft.com/mssql/server:2017-latest AS release

ENV ACCEPT_EULA=Y

docker -compose.yml

version: "3"
services:
    coreapi:
        build:
            context: ./theapi
            dockerfile: Dockerfile
        ports:
            - "5000:5000"
    sqlserver:
        build:
            context: ./sqlserver
        ports:
            - "1433:1433"    
        environment: 
            - ACCEPT_EULA="Y"
            - SA_PASSWORD="1StrongPwdclear"
    angular:
        build:
            context: ./frontend
            dockerfile: Dockerfile
        ports:
            - "4300:4200"    

Я также проверил, если контейнер работает нормально:

enter image description here

Это наводит меня на мысль, что что-то не так с моим docker -композиционным файлом. Я не уверен, что.

РЕДАКТИРОВАТЬ:

Docker -compose.yml:

version: "3"
services:
    coreapi:
        build:
            context: ./theapi
            dockerfile: Dockerfile
        ports:
            - "5000:5000"
    sqlserver:
        build:
            context: ./sqlserver
        ports:
            - "1433:1433"    
        environment: 
            - ACCEPT_EULA=Y
            - SA_PASSWORD=1StrongPwdclear
    angular:
        build:
            context: ./frontend
            dockerfile: Dockerfile
        ports:
            - "4300:4200"    

Структура папок в Ubuntu VM:

enter image description here

frontend-- Dockerfile:

FROM node:alpine

WORKDIR '/app'

COPY ./package.json .

EXPOSE 4200

RUN npm i

COPY . .

CMD ["npm","start"]

sqlserver- Dockerfile

FROM mcr.microsoft.com/mssql/server:2017-latest AS build
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=1StrongPwdclear

WORKDIR /tmp
COPY AdventureWorksLT2017.bak .
COPY restore-backup.sql .


FROM mcr.microsoft.com/mssql/server:2017-latest AS release

ENV ACCEPT_EULA=Y

theapi-- dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
EXPOSE 80/tcp

WORKDIR /app
COPY --from=build-env /app/out .

 ENTRYPOINT ["dotnet", "theapi.dll", "--urls", "http://*:5000"]

1 Ответ

0 голосов
/ 03 апреля 2020

Для вашей проблемы вам просто нужно изменить настройку среды следующим образом:

    environment: 
        - ACCEPT_EULA=Y
        - SA_PASSWORD=1StrongPwdclear

Тогда все будет работать нормально. Вы можете взглянуть на окружение в docker -compose.

Обновление:

У меня нет других вещей, которые вы использовали, так что я просто могу проверить docker -compose для sqlserver. Файл Docker здесь:

FROM mcr.microsoft.com/mssql/server:2017-latest AS build
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=1StrongPwdclear

FROM mcr.microsoft.com/mssql/server:2017-latest AS release

ENV ACCEPT_EULA=Y

И файл docker -com здесь:

version: '3.3'

services:
  sqlserver-1:
    build:
      context: .
    ports:
      - "1433:1433"
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=1StrongPwdclear

Затем я также могу подключиться к серверу sqlserver только с помощью команды:

sqlcmd -S localhost -U sa -P 1StrongPwdclear
...