【问题标题】:How do I run a VIsual Studio Docker container from the command line? Works in VS, but not on command line如何从命令行运行 VIsual Studio Docker 容器?适用于VS,但不适用于命令行
【发布时间】:2018-11-08 13:18:59
【问题描述】:

使用 VIsual Studio 2017 Out-of-the-Box (OOB) docker 支持,我可以使用 F5 按钮在我的 Visual Studio 解决方案中构建和运行我的容器 - 这会成功启动我的网站容器,并且我看到了我的网站!我注意到它正在使用 docker-compose 来执行此操作(成功)。

但是

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

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

docker-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(我从命令行,从解决方案目录运行它)。这会启动容器,并说

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

但我无法浏览该网站。 URL 在哪里(上面写着 [::]:80 --> 看起来很神秘)?我尝试http://localhost:80 但我得到无法访问此站点 localhost 拒绝连接。

  1. 我尝试 docker run -it myrepo/mycontainer:1.0.0.0 --publish 80:80 得到与上面相同的结果无法访问此站点等 p>

  2. 我尝试 docker run -it myrepo/stweb:1.0.0.1 -p 80:80 并得到 短开关“-p”未在开关映射中定义。

  3. 我从解决方案目录尝试 docker build。我的解决方案包含我的 Web 应用项目中的 Dockerfile。该解决方案构建良好并且能够复制文件。但是 docker build 不爽,找不到解决方案文件。我使用,来自解决方案目录:

    docker build MyWebAppDirectory

我得到 COPY failed: stat /var/lib/docker/tmp/docker-builder753352966/MyApp.sln: no such file or directory

但是,如果我将 Dockerfile(位于 Web App 项目中的文件复制到解决方案目录,它可以工作!)。 OOB Dockerfile 位于 Web App 目录中。但这不适用于我尝试的任何排列中的命令行。我需要将 DockerFile 移出 Web App Project。但这会破坏 Visual Studio 的构建!

问题:

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

  2. 关于如何从命令外壳运行我的容器(特别是网站容器)有什么想法吗? (我对 docker run 以及 docker-compose 特别感兴趣)

  3. 关于“短开关 '-p' 未在开关映射中定义”的任何想法?

  4. 特定项目的 Dockerfile 的正确位置是什么?解决方案目录还是项目目录?

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

非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    运行网络容器

    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 以查看该站点。


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

    您有两个图像:mssqlst.web
    st.web 缺少 container_name

    【讨论】:

    • 非常感谢 gldraphael!
    • 你好,我试过: "docker-compose build" 然后 "docker-compose up" ,在 docker -compose.overrife.yml 中说端口:443 和 80,搜索 localhost:443 和localhost:80 什么都没有...
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多