プロキシおよび非プロキシホスト環境の両方で実行したいDockerisedアプリケーションがあります。ホストに存在する場合にのみ、http_proxyなどの通常の環境変数をコンテナーにコピーして、この問題を解決しようとしています。
実行することで、そこの90%を取得できます。
set | grep -i _proxy=>proxies.env
トップレベルのスクリプトで、その後、私のdocker-compose.ymlで:
myserver:
build: ./myserver
env_file:
- proxies.env
これにより、ホストの環境プロキシ変数が存在する場合、サーバーコンテナーにコピーされます。これらの変数は、コンテナー実行時に、つまりDockerfile CMDまたはENTRYPOINTが実行される段階で使用できるという意味で機能します。
ただし、DockerfileのRUNコマンドからビルドステップとしてnpmを実行する必要があるコンテナが1つあり、これらの変数はこの段階では存在しないように見えるため、npmはプロキシを見つけられず、ハングします。他の作品では、私が持っている場合
RUN set
dockerfileでは、proxies.envから変数を見ることができませんが、
docker exec -it myserver /bin/bash
そして、setを実行すると、proxies.envからすべてを見ることができます。
Docker-compose.ymlとDockerfileがプロキシを使用するホストとプロキシを使用しないホストの両方で動作するように、これらの変数をハードコーディングせずにコンテナのビルド時に表示する方法を推奨できますか?
(centos 7、docker-compose 1.3.1およびdocker 1.7.0で実行)
たぶんあなたはこれを試すことができます:
RUN
、ADD
を呼び出す前に、.envファイルを画像に
ADD proxies.env proxies.env
次に、RUNステートメントのプレフィックスを付けます。
RUN export `cat proxies.env` && echo "FOO is $FOO and BAR is $BAR"
これにより、次の出力が生成されます。
root@armenubuntudev:~/Dockers/set-env# docker build -t ashimoon/envtest .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
---> 91e54dfb1179
Step 1 : ADD proxies.env proxies.env
---> Using cache
---> 181d0e082e65
Step 2 : RUN export `cat proxies.env` && echo "FOO is $FOO and BAR is $BAR"
---> Running in 30426910a450
FOO is 1 and BAR is 2
---> 5d88fcac522c
Removing intermediate container 30426910a450
Successfully built 5d88fcac522c
2016を更新、docker-compose 1.6.2、docker 1.10以降、 docker-compose.yml
バージョン2 :
これで args:
サブセクション の build:
section 、これには非常に興味深い可能性が含まれています。
キーのみのビルド引数は、Composeが実行されているマシン上の環境値に解決されます。
PR 265 (2016年1月)を参照
結果として、プロキシ変数をハードコーディングせずに導入する方法docker-compose.yml
ファイル自体は、正確な構文を使用しています。
version: '2'
services:
myservice:
build:
context: .
args:
- http_proxy
- https_proxy
- no_proxy
Docker-compose upを呼び出す前に、プロキシ環境変数が設定されていることを確認する必要があります。
export http_proxy=http://username:[email protected]:port
export https_proxy=http://username:[email protected]:port
export no_proxy=localhost,127.0.0.1,company.com
docker-compose up
その後、Dockerfile
はdocker-compose
プロセスは、プロキシ変数値を自動的に取得しますが、docker-compose.yml
には、ハードコーディングされた特定の値は含まれません。
「環境」オプションが問題を解決するかもしれません。ドッカーの作成ファイルは次のようになります。
myserver:
build: ./myserver
environment:
- HTTP_PROXY=192.168.1.8
- VARIABLE=value
- ...
docker-compose.yml
...
server:
build: .
args:
env: $ENV
...
Dockerfile
ARG env
ENV NODE_ENV $env
この例はYUMを修正します。
version: '2'
services:
example-service:
build:
context: .
args:
http_proxy: proxy.example.com:80