我的 docker 图片在使用 `--env` 时看不到环境变量,但它在使用 docker-compose 时看到了
My docker image is not seeing the enviornemnt variables when using the `--env` yet it sees with using docker-compose
我创建了我的 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
或
时,相同的图像不起作用
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
传递的变量,但它看到使用 [=20= 中的 environment
部分传递的变量] 文件。
我在这里做错了什么?如何使用 docker container run
命令 运行 我的图像?
注意: 我之所以要 运行 使用 docker container run
图像是因为我想在“Azure Web 服务”上托管应用程序" 并使用 --env
标志传递环境变量。将我的图像部署到 Azure Web 服务后,容器无法 运行 并显示与我在本地 运行ning docker 运行 命令时得到的错误相同的错误。
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
我创建了我的 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
或
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
传递的变量,但它看到使用 [=20= 中的 environment
部分传递的变量] 文件。
我在这里做错了什么?如何使用 docker container run
命令 运行 我的图像?
注意: 我之所以要 运行 使用 docker container run
图像是因为我想在“Azure Web 服务”上托管应用程序" 并使用 --env
标志传递环境变量。将我的图像部署到 Azure Web 服务后,容器无法 运行 并显示与我在本地 运行ning docker 运行 命令时得到的错误相同的错误。
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