当前位置: 首页 > 知识库问答 >
问题:

docker compose是否自动创建端口映射?

周龙光
2023-03-14

我创建了一个简单的asp。Visual Studio 2019中的net core应用程序,并添加了docker支持。

Dockerfile、. docker忽略和docker-comush文件都已创建。

在命令提示下,我导航到docker compose文件夹。yml文件存在,然后运行命令

docker-compose up

我看到创建了容器并进行了端口映射,这样我就可以在浏览器中浏览web应用了。

所以当我在容器上运行以下检查命令时

docker inspect --format="{{ .NetworkSettings.Ports}}" ContainerId

我得到了这样的东西

map[80/tcp:[{0.0.0.0 32782}]]

现在我可以用http://localhost:32782/index.html

下一步如果我用

docker-compose down

容器被停止并删除。创建的映像保持不变。

现在,当我做一个码头工人运行对该图像启动一个容器

docker run -it --rm  ae39

创建了一个新的容器,但我无法浏览应用程序,因为没有从容器到主机的端口映射。当我使用run命令时,我必须明确指定这一点。只有这样,我才能浏览主机容器内运行的应用程序。

但是当我使用docker comush时,我不必指定端口映射。神奇的事情发生了,端口映射为我创建。请注意,docker-compose.yml文件是普通的,不包含任何端口映射。Dockerfile也是如此。它们包括在下面供参考。

我的问题是docker compose是否会自动创建端口映射?如果是,怎么做?当然,这是为了与Visual Studio 2019合作

version: '3.4'

services:
  generator31:
    image: ${DOCKER_REGISTRY-}generator31
    build:
      context: .
      dockerfile: generator31/Dockerfile

dockerfile在这里。

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["generator31/generator31.csproj", "generator31/"]
RUN dotnet restore "generator31/generator31.csproj"
COPY . .
WORKDIR "/src/generator31"
RUN dotnet build "generator31.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "generator31.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "generator31.dll"]

共有2个答案

胡彭亮
2023-03-14

通过在dockerfile中使用EXPOSE标签,它会告诉您正在使用的平台,您需要映射该端口。当使用docker-comush时,它会看到这个,并自动将其映射到一个随机打开的端口。然而,EXPOSE关键字不会暴露任何端口。它只是用来对您正在使用的平台说“你能为我暴露这个端口吗”,并依靠平台来为你做这件事。

如果您希望端口每次都映射到主机上的特定端口,那么您可以将端口添加到docker-compose.yml中的服务(host_machine_port:container_port)

扶杜吟
2023-03-14

我想我找到了答案。

关键是配置命令

docker-compose config

运行该命令后,我看到以下内容。

services:
  generator31:
    build:
      context: D:\Trials\Docker\aspnetcore311\generator31
      dockerfile: generator31/Dockerfile
    environment:
      ASPNETCORE_ENVIRONMENT: Development
    image: generator31
    ports:
    - target: 80
version: '3.4'

我看到了港口,也看到了环境。在我粘贴在问题中的docker compose文件中,它们不存在。那么它们是从哪里来的呢?

我在文件资源管理器中打开文件夹,我看到docker-compose.override.yml文件静静地放在docker-compose.yml文件旁边。打开那个文件,我得到答案。端口在那里定义。Docker撰写命令从多个文件中获取配置,docker-compose.override.yml就是这样一个文件。现在,正如法比安-德斯诺斯建议的那样,这应该会有所帮助。

 类似资料:
  • 问题内容: http://www.vaannila.com/spring/spring-hibernate- integration-1.html 在阅读本教程时,他们没有提到在数据库中创建表的任何内容。一旦我指定了表和字段,Hibernate会自动处理它吗? 这是我的bean配置。 问题答案: 您的hibernate.hbm2ddl.auto设置应该确定所创建的数据库(选项为,,或者)

  • 我的AWS ECR中有一个Docker映像,我想将其转换为AWS AMI,以便在环境中创建实例。 尝试在Docker容器上使用AMI的原因 我必须在m4中的Docker容器中运行计算密集型ML任务。xlarge在一些文本文件上的实例。然而,使用Docker时,实例的CPU利用率达到了100%,脚本也在提前终止。 但是,它在Docker外部的同一实例中运行良好。 因此,我想从Docker转移到AMI

  • 问题内容: 我应该在列上 定义一个单独的索引(出于搜索目的),还是该索引是“自动”与约束一起添加的? 编辑 :根据科宾的建议,我在空桌上查询。这是结果,我不知道如何解释: 将IXD_EMAIL添加到表中时,相同的查询显示: 问题答案: 一个 独特的关键 是指数的一个特例,像个与独特性增加检查的常规指标。使用您可以看到您的唯一键实际上是B树类型索引。 一个 综合指数 上是不够的,你不需要只电子邮件单

  • 问题内容: 有时我从那里下载python源代码,却不知道如何安装所有依赖项。如果没有文件,则必须手动创建。问题是:给定python源代码目录,是否可以从import部分自动创建? 问题答案: 如果使用虚拟环境,就可以了。 IF NOT ,pigar将是您不错的选择。 顺便说一句,我不确定它是否可以在2.6下使用。 更新 : 建议使用Pipenv或其他工具来改善您的开发流程。 对于 Python 3

  • 有时我从下载python源代码,但不知道如何安装所有依赖项。如果没有文件,我必须手工创建它。问题是:给定python源代码目录,是否可以从import部分自动创建?

  • 我正在尝试仅对特定索引禁用动态映射创建,而不是对所有索引禁用。出于某种原因,我无法将默认映射设置为“dynamic”:“false”。所以,这里有两个选项,我可以看到: 指定属性的索引。制图员。“动态”文件弹性搜索。yml 第一个选项只能接受值:true、false和strict。因此,无法指定特定索引的子集(就像我们使用属性“action.auto_create_index”按模式所做的那样)h