0

我为我的 OrchardCore 项目创建了一个 docker 镜像。我尝试使用以下命令运行它

docker container run --detach --publish 8085:80 --name imageName MYIMAGE -e OrchardCore__DatabaseProvider=SqlConnection -e OrchardCore__Default__State='Uninitialized' -e OrchardCore__OrchardCore_DataProtection_Azure__ContainerName='dataprotection' -e OrchardCore__OrchardCore_Shells_Azure__ContainerName='hostcontainer' -e OrchardCore__ConnectionString='myConnectionString' -e OrchardCore__OrchardCore_DataProtection_Azure__ConnectionString='myBlobConnection' -e OrchardCore__OrchardCore_Shells_Azure__ConnectionString='myBlobConnection'

但是,图像不运行。当我检查容器日志时,我看到以下错误

Unhandled exception. System.ArgumentNullException: The 'OrchardCore.Shells.Azure' configuration section must be defined (Parameter 'BlobShellStorageOptions')

上述异常是由于缺少配置而使用-e flag

接下来,我创建了以下 docker-compose 文件,并且图像按预期工作,没有错误!docker container run但是在使用上述或 in时,相同的图像不起作用

version: "3.9"
services:
    oc_app:
        image: "myimage:tag"
        container_name: "oc_app"
        ports:
            - "8000:80"
        depends_on:
            - db
        environment:
            OrchardCore__Default__State: "Uninitialized"
            OrchardCore__Default__TablePrefix: "Default"
            OrchardCore__OrchardCore_DataProtection_Azure__ConnectionString: "DefaultEndpointsProtocol=https;AccountName=<MyAccountName>;AccountKey=<MyKey>;EndpointSuffix=core.windows.net"
            OrchardCore__OrchardCore_DataProtection_Azure__ContainerName: "dataprotection-local"
            OrchardCore__OrchardCore_Shells_Azure__ConnectionString: "DefaultEndpointsProtocol=https;AccountName=<MyAccountName>;AccountKey=<MyKey>;EndpointSuffix=core.windows.net"
            OrchardCore__OrchardCore_Shells_Azure__ContainerName: "hostcontainer-local"
            OrchardCore__DatabaseProvider: "SqlConnection"
            OrchardCore__ConnectionString: "Server=db;Database=master;User=sa;Password=someStringPassword"
    db:
        image: "mcr.microsoft.com/mssql/server"
        container_name: sqlserver
        environment:
            SA_PASSWORD: "someStringPassword"
            ACCEPT_EULA: "Y"

就像应用程序没有看到由 传递的变量,--env或者-e它在使用文件中的environment部分传递时看到了变量docker-compse.yml

我在这里做错了什么?如何使用该docker container run命令运行我的图像?

注意:我想使用 运行图像的原因docker container run是因为我想在“Azure Web 服务”上托管应用程序并使用--env标志传递环境变量。将我的映像部署到 Azure Web 服务后,容器无法运行,并显示与我在本地运行 docker run 命令时遇到的错误相同的错误。

4

1 回答 1

2

Docker 选项需要放在镜像名称之前。图像名称之后的任何内容都将成为图像的命令。所以你需要做

docker container run --detach --publish 8085:80 --name imageName -e OrchardCore__DatabaseProvider=SqlConnection -e OrchardCore__Default__State='Uninitialized' -e OrchardCore__OrchardCore_DataProtection_Azure__ContainerName='dataprotection' -e OrchardCore__OrchardCore_Shells_Azure__ContainerName='hostcontainer' -e OrchardCore__ConnectionString='myConnectionString' -e OrchardCore__OrchardCore_DataProtection_Azure__ConnectionString='myBlobConnection' -e OrchardCore__OrchardCore_Shells_Azure__ConnectionString='myBlobConnection' MYIMAGE
于 2022-01-16T22:38:52.243 回答