如何从命令行运行VIsual Studio Docker容器?适用于VS,但不适用于命令行

Ban*_*ona 5 docker asp.net-core visual-studio-2017

使用VIsual Studio 2017开箱即用(OOB)docker支持,我可以使用F5按钮在我的Visual Studio解决方案中构建和运行我的容器 - 这会成功激活我的网站容器,我看到了我的网站!我注意到它正在使用docker-compose来执行此操作(SUCCESS).

我想了解如何在没有Visual Studio的情况下从命令行运行容器.

首先,我在发布模式(Visual Studio)中构建我的图像.这会生成两个新图像(docker图像显示一个没有名称,一个名称我在docker-compose.yml中定义).[问题:为什么要创建额外的图像?)

泊坞窗,compose.yml:

services:
  mssql:
    image: microsoft/mssql-server-linux:2017-latest
    container_name: sql1
    ports:
      - 1433:1433
    environment:
      SA_PASSWORD: "password"
      ACCEPT_EULA: "Y"
      MSSQL_PID: Developer
  st.web:
    image: myrepo/stweb:1.0.0.1
    build:
      context: .
      dockerfile: ST.Web/Dockerfile
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY SupportTicket.sln ./
COPY ST.Web/ST.Web.csproj ST.Web/
COPY ST.AppServicesLib/ST.AppServicesLib.csproj ST.AppServicesLib/
COPY ST.SharedInterfacesLib/ST.SharedInterfacesLib.csproj ST.SharedInterfacesLib/
COPY ST.SharedEntitiesLib/ST.SharedEntitiesLib.csproj ST.SharedEntitiesLib/
COPY ST.SQlServerRepoLib/ST.SQLServerRepoLib.csproj ST.SQlServerRepoLib/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/ST.Web
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ST.Web.dll"]
Run Code Online (Sandbox Code Playgroud)

现在我想从命令行运行它.

  1. docker-compose up(我从命令行运行,来自Solution Directory).这会激起容器,并说

    现在收听:http:// [::]:80

但我无法浏览网站.URL在哪里(它说[::]:80 - >看起来很神秘)?我试试http:// localhost:80但我得到这个网站无法访问localhost拒绝连接.

  1. 我尝试使用docker run -it myrepo/mycontainer:1.0.0.0 --publish 80:80并且我得到与上面相同的内容无法访问此站点等.

  2. 我尝试使用docker run -it myrepo/stweb:1.0.0.1 -p 80:80并获取短切换'-p'未在交换机映射中定义.

  3. 我从解决方案目录中尝试使用docker build.我的解决方案包含我的Web App项目中的Dockerfile.该解决方案构建良好,并能够复制文件.但是docker build很不开心,无法找到解决方案文件.我在解决方案目录中使用:

    docker build MyWebAppDirectory

我收到COPY失败:stat /var/lib/docker/tmp/docker-builder753352966/MyApp.sln:没有这样的文件或目录

但是,如果我将Dockerfile(位于Web App项目中)复制到Solution Dir,它就可以工作!).OOB Dockerfile位于Web App目录中.但是在我尝试的任何排列中,这都不适用于命令行.我需要将DockerFile移出Web App Project.但这打破了Visual Studio构建!

问题:

  1. 如何使用docker 从命令行浏览到使用Visual Studio 2017 OOB docker支持的网站?(什么是正确的程序/步骤和URL?)

  2. 关于如何运行我的容器(特别是网站容器)的任何想法形成命令shell?(我对docker run以及docker-compose特别感兴趣)

  3. 关于"短开关'-p'的任何想法都没有在开关映射中定义."?

  4. Dockerfile对于特定项目的正确位置是什么?SolutionDir还是项目目录?

  5. 为什么我在发布模式下构建时会创建一个额外的未命名图像?我希望只看到一个输出.

非常感谢!

gld*_*ael 7

从命令行运行您的应用程序

# Build
docker-compose build
# Run
docker-compose up
Run Code Online (Sandbox Code Playgroud)

现在浏览到localhost:{port}您的浏览器.(您应该能够{port}docker-compose.override.yml文件中找到配置.)

运行Web容器

  1. 构建容器:

    docker build -f path/to/Dockerfile . -t virasana/stweb
    
    Run Code Online (Sandbox Code Playgroud)

    的语法docker builddocker build <context>.由于上下文是解决方案目录,因此docker build必须从那里运行命令.该-f标志用于指定要使用的Dockerfile.

    我更喜欢保持Dockerfile它在逻辑上属于的项目.如果您需要在同一解决方案中拥有多个容器,这也是您唯一的选择.

  2. 您现在可以使用以下命令运行容器:

    docker run -it --rm -p "5500:80" virasana/stweb
    
    Run Code Online (Sandbox Code Playgroud)

    浏览以localhost:5500查看该网站.


为什么我在发布模式下构建时会创建一个额外的未命名图像?我希望只看到一个输出.

你有两张图片:mssql&st.web.
st.web缺少一个container_name.