docker 如何使用YAML文件在Azure容器示例上Map转发端口

lf3rwulv  于 2023-01-08  发布在  Docker
关注(0)|答案(2)|浏览(128)

Azure容器示例YAML引用提供了在容器中公开多个端口的选项。请参见https://learn.microsoft.com/en-us/azure/container-instances/container-instances-reference-yaml
但是,我还没有弄清楚如何像使用docker那样Map/转发端口。我想在YAML文件上定义一个端口转发,就像使用docker命令一样:

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=pw' -p 14000:1433

使用Azure YAML架构是否有限制?
我试过:

ports:
      - port: 11401
      - port: 1433

但是它打开了两个端口。

j13ufse2

j13ufse21#

根据文档和doc,请尝试以下格式:

ports:
      - "14000:1433"
ev7lccsx

ev7lccsx2#

根据以下文档,Azure容器示例不支持端口Map(如Docker中)。
更多详情请参考本文档:Troubleshoot common issues - Azure Container Instances | Microsoft Learn
容器示例中暴露的端口应该与容器映像监听的端口相同
但是,您可以通过在docker文件中定义参数和环境变量来实现,这样您就可以在部署期间覆盖port。
例如,默认情况下,下面的docker文件将侦听http端口80,因为http_port设置为80。

#Dockerfile
FROM TestImage
ARG http_port=80
ENV target_port ${http_port}
.
.
.

但是如果您需要ACI监听不同的端口,那么在ACI部署yaml文件的环境变量中定义target_port,如下所示。

#Azure container instance yaml file

apiVersion: ‘2021-10-01’
location: <location-name>
name: <container instance group name>
properties:
     containers:
       - name: <container-name>
         properties:
            image: <image-name:version>
            environmentVariables:
              - name: target_port
                value: 8090 # once this environment variable defined, the port in the image will change to 8090.
          ports:
             - port: 8090
               protocol: tcp
      ipAddress:
          type: Public  #value can be Public or Private
          ports:
            - protocol: tcp
              port: 8090
      type: Public
type:Microsoft.ContainerInstance/containerGroups

一旦上述文件已部署,Azure容器示例开始侦听端口8090,即使映像端口为80。

相关问题