[英]Unable to connect to SQL Server running in container inside Ubuntu VM on Azure
[英]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.