質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Docker

    808questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

docker build で指定する http_proxy が履歴に残らないようにしたい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,565

matobaa

score 1886

前提・実現したいこと

docker build の際に Proxyを設定すると、docker history --no-trunc __image__ で表示されてしまいますが、この情報を残さない方法はあるでしょうか。

dockerのOracle12cイメージを作成しようと github.com/oracle/docker-images から持ってきた Dockerfile を使っているのですが、認証ありProxyの裏にいるため、環境変数 http_proxy=http://username:password@proxyhost:port を設定してビルドしています ( buildDockerImage.sh が、環境変数をもとに --build-arg http_proxy=${http_proxy} を指定するようになっています)。

発生している問題・エラーメッセージ

この手順で作成したイメージの履歴を見ると以下のようになっていて、認証プロキシのユーザ名とパスワードがばっちり記録されてしまっています(出力は見やすく加工しています):

[matobaa@localhost dockerfiles]$ docker history --no-trunc 919
IMAGE     CREATED BY
919df44   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "$ORACLE_BASE/$RUN_FILE"]
1406756   /bin/sh -c #(nop)  EXPOSE 1521/tcp 5500/tcp
bcd8207   /bin/sh -c #(nop)  VOLUME [/opt/oracle/oradata]
9459ef3   /bin/sh -c #(nop)  WORKDIR /home/oracle
4dbe16d   /bin/sh -c #(nop)  USER [oracle]
19c1f25   |1 http_proxy=http://matobaa:P@ssW0rd@192.0.2.127:8080 /bin/sh -c $ORACLE_BASE/oraInventory/orainstRoot.sh &&     $ORACLE_HOME/root.sh &&     rm -rf $INSTALL_DIR
5e9c84d   /bin/sh -c #(nop)  USER [root]
9563f43   |1 http_proxy=http://matobaa:P@ssW0rd@192.0.2.127:8080 /bin/sh -c $INSTALL_DIR/$INSTALL_DB_BINARIES_FILE EE
eee5fc7   /bin/sh -c #(nop)  USER [oracle]
0bc6917   |1 http_proxy=http://matobaa:P@ssW0rd@192.0.2.127:8080 /bin/sh -c chmod ug+x $INSTALL_DIR/*.sh &&     sync &&     $INSTALL_DIR/$CHECK_SPACE_FILE &&     $INSTALL_DIR/$SETUP_LINUX_FILE
8a6af9e   /bin/sh -c #(nop) COPY multi:7d82a8a4 in /opt/oracle/
55bc4e1   /bin/sh -c #(nop) COPY multi:b3dfdefb in /opt/oracle/install/
d087972   /bin/sh -c #(nop)  ENV INSTALL_DIR=/opt/oracle/install PATH=/opt/oracle/product/12.1.0.2/dbhome_1/bin:/opt/oracle/product/12.1.0.2/dbhome_1/OPatch/:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LD_LIBRARY_PATH=/opt/oracle/product/12.1.0.2/dbhome_1/lib:/usr/lib CLASSPATH=/opt/oracle/product/12.1.0.2/dbhome_1/jlib:/opt/oracle/product/12.1.0.2/dbhome_1/rdbms/jlib
52d871d   /bin/sh -c #(nop)  ENV ORACLE_BASE=/opt/oracle ORACLE_HOME=/opt/oracle/product/12.1.0.2/dbhome_1 INSTALL_FILE_1=linuxamd64_12102_database_1of2.zip INSTALL_FILE_2=linuxamd64_12102_database_2of2.zip INSTALL_RSP=db_inst.rsp CONFIG_RSP=dbca.rsp.tmpl PWD_FILE=setPassword.sh PERL_INSTALL_FILE=installPerl.sh RUN_FILE=runOracle.sh START_FILE=startDB.sh CREATE_DB_FILE=createDB.sh SETUP_LINUX_FILE=setupLinuxEnv.sh CHECK_SPACE_FILE=checkSpace.sh INSTALL_DB_BINARIES_FILE=installDBBinaries.sh
7d7dcc5   /bin/sh -c #(nop)  MAINTAINER Gerald Venzl <gerald.venzl@oracle.com>
f005b52   /bin/sh -c #(nop)  CMD ["/bin/bash"]
<missing> /bin/sh -c #(nop) ADD file:8244748e in /
<missing> /bin/sh -c #(nop)  MAINTAINER Oracle Linux Product Team <ol-ovm-info_ww@oracle.com>

試したこと

docker build をみて --rm=true や --force-rm をつけてみたのですが、history は消せませんでした。
systemd で Docker の管理・設定 を参考に、/etc/sysconfig/docker に HTTP_PROXY を指定してみたのですが、中からproxyを通ることができず、ビルドできませんでした。
コンテナをexport | import することでレイヤーをマージできるようです。まだ試せていません。

補足情報(言語/FW/ツール等のバージョンなど)

[matobaa@localhost ~]$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[matobaa@localhost ~]$ docker --version
Docker version 1.12.5, build 047e51b/1.12.5
[matobaa@localhost ~]$ docker info
Containers: 1
 Running: 1
 Paused: 0
 Stopped: 0
Images: 8
Server Version: 1.12.5
Storage Driver: devicemapper
 Pool Name: docker-253:0-134978369-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 21.47 GB
 Backing Filesystem: xfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 13 GB
 Data Space Total: 107.4 GB
 Data Space Available: 34.82 GB
 Metadata Space Used: 7.311 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.14 GB
 Thin Pool Minimum Free Space: 10.74 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.135-RHEL7 (2016-11-16)
Logging Driver: journald
Cgroup Driver: systemd
Plugins:
 Volume: local
 Network: overlay bridge null host
 Authorization: rhel-push-plugin
Swarm: inactive
Runtimes: runc docker-runc
Default Runtime: docker-runc
Security Options: seccomp selinux
Kernel Version: 3.10.0-514.6.1.el7.x86_64
Operating System: Red Hat Enterprise Linux
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 2
CPUs: 4
Total Memory: 5.658 GiB
Name: localhost.localdomain
ID: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Http Proxy: http://matobaa:P@ssW0rd@192.0.2.127:8080
Https Proxy: http://matobaa:P@ssW0rd@192.0.2.127:8080
Registry: https://registry.access.redhat.com/v1/
Insecure Registries:
 127.0.0.0/8
Registries: registry.access.redhat.com (secure), docker.io (secure)
[matobaa@localhost ~]$ 

このスクリプト自体はrootを12GBも要求しやがるので、qiita:Dockerでルートディスクサイズを調整する にそって調整するか、 checkSpaces.sh#L13 の12を10未満に減らすことで build success します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • t_obara

    2017/02/23 12:21

    buildの時ではなく、実行の際に環境変数などで渡す方法では問題があるのでしょうか?

    キャンセル

  • matobaa

    2017/02/23 13:12 編集

    ビルド中、インストールバイナリをwgetする時に proxyを通りたいです。

    キャンセル

回答 3

+1

認証を通さないプロキシをDockerと認証プロキシの間において、そこから認証プロキシに接続するのではどうでしょう?
または、Dockerホスト側で透過プロキシを設定するのも良さそうな気がします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

0

http://qiita.com/minamijoyo/items/711704e85b45ff5d6405
Docker multi stage build という機能でできるようになる! うれしい!
中間イメージを捨ててしまえばよさそうです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/19 16:34

    使えるようになったらHistory見てみます。

    キャンセル

0

ENV でも --build-arg でも history で見えてしまうようです。 

スマートではないですが、環境変数を記述したファイルを ADD や COPY で転送し、source コマンドで読み込む方法はどうでしょうか。

$ cat ./env
export http_proxy=http://(略)

$ cat dockerfile
  (略)
ADD env /tmp/env
RUN source /tmp/env ; (コマンド) 
  (略)
RUN rm -f /tmp/env 

(2017/02/24 01:12) 追記

もしかして、/tmp/env ファイルが途中のレイヤに残ってしまうかもしれません。
だとしたら、history に見えなくなっても意味ないですね。すみません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Docker

    808questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです