2016-10-11 2 views
0

私は、ASP.NETサイトをWindowsドッカーコンテナで実行しています。 Dockerfileで定義されている環境変数を読み取れるようにしたい。私はそれを動作させることができません(とコンテナを見つめて。)Docker for Windows:ASP.NETサイトがDockerfileに定義されている環境変数を読み取ることができません。

リプロ:

  • ウィンドウコンテナを使用するために必要なソフトウェアをインストールして設定します。

  • 新しい(空の)フォルダを作成します。

  • 新しいフォルダに2つのファイル(Dockerfileとdefault.aspx)を作成します。内容は次のとおりです。空のフォルダへ

  • 移動し、docker build -t test .を実行します(これは、対話型のコンテナ内の名前テスト

  • スタートPowerShellを使用した容器のイメージを作成します。docker run -it --rm -e FROM_COMMAND_LINE="From command line" --entrypoint powershell test

あなたが今になりますコンテナの中にpowershellプロンプトが表示されるようになりました。ウェブページを取得することで、ウェブサイトで環境変数が利用できないことを確認できます。

$(wget http://localhost/default.aspx -UseBasicParsing).Content 

結果の抽出:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables 
COMPUTERNAME - 540CA54CDB93<br> 
PUBLIC - C:\Users\Public<br> 
LOCALAPPDATA - C:\Windows\system32\config\systemprofile\AppData\Local<br> 
... 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables - Process 
COMPUTERNAME - 540CA54CDB93<br> 
PUBLIC - C:\Users\Public<br> 
LOCALAPPDATA - C:\Windows\system32\config\systemprofile\AppData\Local<br> 
... 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables - User 
Path - C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;<br> 
TEMP - C:\Windows\system32\config\systemprofile\AppData\Local\Temp<br> 
TMP - C:\Windows\system32\config\systemprofile\AppData\Local\Temp<br> 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables - Machine 
PROCESSOR_REVISION - 3f02<br> 
... 

注FROM_COMMAND_LINEとFROM_DOCKERFILEが欠落していること。

PS C:\> $env:FROM_COMMAND_LINE 
From command line 
PS C:\> $env:FROM_DOCKERFILE 
Value from dockerfile 

を私もIISRESETを行うためにテストしているが、それは動作を変更しません:あなたは変数が欠落していないことを確認することができますPowerShellコンソールで

  1. 私は間違ったことをしましたか?

  2. 内部でiisが利用できるようにするための環境変数を に指定する他の方法はありますか?


Dockerfile:

FROM microsoft/aspnet 
ENV FROM_DOCKERFILE Value from dockerfile 

ADD default.aspx c:/inetpub/wwwroot/default.aspx 

のdefault.aspx:

<% @ Page Language="C#" Trace="false"%> 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables 
<% 
foreach (DictionaryEntry de in Environment.GetEnvironmentVariables()) { 
    Response.Write(string.Format("{0} - {1}<br>\n", de.Key, de.Value)); 
} 
%> 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables - Process 
<% 
foreach (DictionaryEntry de in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process)) { 
    Response.Write(string.Format("{0} - {1}<br>\n", de.Key, de.Value)); 
} 
%> 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables - User 
<% 
foreach (DictionaryEntry de in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User)) { 
    Response.Write(string.Format("{0} - {1}<br>\n", de.Key, de.Value)); 
} 
%> 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx GetEnvironmentVariables - Machine 
<% 
foreach (DictionaryEntry de in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine)) { 
    Response.Write(string.Format("{0} - {1}<br>\n", de.Key, de.Value)); 
} 
%> 

注:私は現在、ドッカーバージョン1.12.2-RC1-beta27を使用しています。1(ビルド:7538)を-e介しdockerに渡さa0eb77a

+0

あなたは 'ENV'指示文が正しく見えません。https://docs.docker.com/engine/reference/builder/#/env – bjhaid

+0

よく見ると、私は構文の最初のバリエーションを使用しています: 'ENV 'とはFROM_DOCKERFILEあると dockerfileからの値である:あなたが上記のテキストで見るようdockerfile' から 'ENV FROM_DOCKERFILE値(また、すべてのものは、PowerShellコンソールではなく、WEB-に正しいですアプリケーション) –

+0

githubに問題を追加しました: [https://github.com/Microsoft/aspnet-docker/issues/7](https://github.com/Microsoft/aspnet-docker/issues/7) –

答えて

2

環境変数は、それらがHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environmentハイブのレジストリ内に存在するシステム変数として設定されていないCreateProcess and lpEnvironment.

を介して容器内のプロセスのために設定されているとしたがってiisresetを実行してもw3wp.exeは変更を取得しません。

現在、回避策オプションのカップルを持っている:

  • あなたのDockerfileでRUN setx /m VAR valを実行して、システム変数を作成することができます。これは、iisresetを実行した後にIISワーカープロセスによって選択されます。
  • そのAppPoolにのみ環境変数を作成します。 RUN appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='DefaultAppPool'].environmentVariables.[name='VAR',value='val']" /commit:apphost
0

今より良いオプションがあります。基本的には、ドッカーをmicrosoft/aspnetに置くと、最新の "ServiceMonitor.exe"が組み込まれ、ローカルプロセス用に定義された環境変数をIIS AppPoolに注入します。 IISプロセスを再起動する必要はなく、すぐにアクセスできます。

ハックが1つありますが、アプリケーションプールは "DefaultAppPool"である必要があります。カスタムアプリケーションプールを作成することはできません。これは、より多くの展開に適しています。

このアップデートの詳細については、hereを参照してください。

関連する問題