簡體   English   中英

無法登錄到在 Azure 上的 Ubuntu VM 上通過 Docker-compose 啟動的容器中運行的 SqlServer

[英]Unable to login to SqlServer running in container started via Docker-compose on Ubuntu VM on Azure

如果我僅使用 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 ODBC Driver 17 for SQL Server:用戶“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"    

我還檢查了容器是否運行良好:

在此處輸入圖片說明

這讓我相信我的 docker-compose 文件有問題。 我不確定是什么。

編輯:

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 上的文件夾結構:

在此處輸入圖片說明

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"]

對於您的問題,您只需要像這樣更改環境設置:

    environment: 
        - ACCEPT_EULA=Y
        - SA_PASSWORD=1StrongPwdclear

然后它會正常工作。 可以在docker-compose中查看環境

更新:

我沒有你用的其他東西,所以我只能測試 docker-compose for sqlserver。 這里的Dockerfile:

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-compose 文件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM