※ この記事はVMWare上のCoreOSについての記述です。Vagrantなど別の環境では、違った方法があるのかもしれません。
dockerのホストOSとしてなるべく軽量なものがいい、CoreOSだ、となるのですが、プロキシ環境下では困ったことになります。
dockerは内部的にはGoのnet/httpを使って、イメージファイルを取りに行きます。したがってプロキシを通すためには、HTTP_PROXY環境変数にプロキシURLを設定すればよいのです。
% export HTTP_PROXY=http://hogeproxy:3128
しかし、CoreOS環境ではdockerデーモンは、systemctlがOS起動時に立ち上げてくれます。ので、起動後ログインして、
% sudo systemctl stop docker.service
% sudo HTTP_PROXY=http://hogeproxy:3128 docker -d
と環境変数付きで再起動すればよいのです。
…
…
… ダサい!
さて、/etcのどこかを書き換えればいいんだな、ということで/etc/profileなどを書き換えようとしても、CoreOSの場合、
% mount
/dev/sda3 on / type ext4 (ro,relatime)
と/etcがリードオンリーでマウントされているので、それができません。
試行錯誤した結果、OEMベンダ向けのディレクトリにスクリプトを書けば、docker起動前に実行してくれることがわかりました。/usr/share/oem ディレクトリの下に、run という名前でシェルスクリプトを置いておけば自動的に実行してくれます。
#!/bin/bash
systemctl set-environment HTTP_PROXY=http://hogeproxy:3128
のように記述して、実行権つけてCoreOS再起動すると、
% docker build .
Uploading context 10240 bytes
Step 1 : FROM stackbrew/ubuntu:saucy
Pulling repository stackbrew/ubuntu
---> 3dfa13a1a7fckB/10.24 kB (100%)/ubuntu, endpoint: https://cdn-registry-1.docker.io/v1/
プロキシ越しにイメージファイルを取得できるようになりました!