You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2017 OOB Docker支持:命令行运行容器及访问问题求助

解答你的Docker部署问题

让我逐个拆解你遇到的问题,给出具体的解决方案:


1. 如何通过命令行使用docker-compose up访问网站?正确步骤及URL是什么?

你的核心问题是**docker-compose.yml里的st.web服务没有配置端口映射**,导致主机无法访问容器内的80端口。

正确步骤:

  1. 编辑你的docker-compose.yml,给st.web服务添加端口映射配置:
    services:
      mssql:
        # 原有的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
        # 新增端口映射,把容器的80端口映射到主机的80端口
        ports:
          - "80:80"
    
  2. 清理之前运行的容器(避免端口冲突或缓存问题):
    docker-compose down
    
  3. 启动服务(如果需要重新构建镜像,加上--build参数):
    docker-compose up --build
    
  4. 访问网站:直接在浏览器打开 http://localhost 即可,因为我们已经把容器的80端口映射到了主机的80端口。

2. 如何通过命令行运行容器(含docker run及docker-compose方式)?

Docker Compose方式

就是上面步骤1-3的操作,重点是先补全docker-compose.yml的端口映射,然后用docker-compose up启动,停止服务用docker-compose down即可。

Docker Run方式

需要确保你已经有构建好的myrepo/stweb:1.0.0.1镜像,然后执行正确格式的命令:

# 后台运行容器,映射80端口到主机
docker run -d -p 80:80 myrepo/stweb:1.0.0.1

# 如果需要交互式查看容器日志,可以用-it代替-d
docker run -it -p 80:80 myrepo/stweb:1.0.0.1

运行后同样访问http://localhost即可。


3. 如何解决“-p短开关未定义”的错误?

这个错误是因为你把-p参数放错了位置!docker run的参数顺序是:Docker的命令参数在前,镜像名在后,镜像名后面的内容会被当成容器内部的启动命令参数。

你之前的命令是:

docker run -it myrepo/stweb:1.0.0.1 -p 80:80

这里-p 80:80被当成了给dotnet ST.Web.dll的参数,自然会报错。

正确的命令应该把-p放在镜像名前面:

docker run -it -p 80:80 myrepo/stweb:1.0.0.1

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

保留Dockerfile在项目目录(比如ST.Web/下)是正确的,这符合Visual Studio的默认配置,不会破坏VS的自动构建流程。

如果需要手动用docker build构建镜像,你不需要移动Dockerfile,只需要在解决方案目录下执行命令时,用-f参数指定Dockerfile的路径,同时把当前目录作为构建上下文:

# 在解决方案目录执行
docker build -t myrepo/stweb:1.0.0.1 -f ST.Web/Dockerfile .

这里的.表示构建上下文是当前解决方案目录,-f指定Dockerfile的位置,这样Docker就能正确找到SupportTicket.sln和各个项目文件了。


5. Release构建为何生成额外无名镜像?

这是Docker多阶段构建的正常现象!你的Dockerfile包含了base、build、publish、final四个构建阶段,每个阶段都会生成一个临时的中间镜像,用来为后续阶段提供文件。这些中间镜像没有被打tag,所以显示为“无名称”。

这些镜像属于构建缓存,当你不需要它们时,可以用以下命令清理:

# 清理所有无用的镜像(包括中间镜像、未使用的镜像)
docker image prune -f

内容的提问来源于stack exchange,提问作者Banoona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:09:24