如何从命令行运行VIsual Studio Docker容器?在VS中运行,但不在命令行

时间:2018-05-29 19:49:27

标签: docker asp.net-core visual-studio-2017

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

BUT

我想了解如何在没有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

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

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

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

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

  2. 但我无法浏览网站。 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

    4. 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. 如何使用Visual Studio 2017 OOB泊坞窗支持从命令行使用 docker-compose up 浏览网站? (正确的程序/步骤和URL是什么?)

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

      3. 关于"短切换' -p'的任何想法未在交换机映射中定义。"?

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

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

      6. 非常感谢!

1 个答案:

答案 0 :(得分:6)

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

# Build
docker-compose build
# Run
docker-compose up

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

运行Web容器

  1. 构建容器:

    docker build -f path/to/Dockerfile . -t virasana/stweb
    

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

    我更喜欢将Dockerfile保留在逻辑上属于的项目中。如果您需要在同一解决方案中安装多个容器,这也是您唯一的选择。

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

    docker run -it --rm -p "5500:80" virasana/stweb
    

    浏览到localhost:5500以查看该网站。

  3.   

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

    您有两张图片:mssql&amp; st.web
    st.web遗漏了container_name