2016-10-16 13 views
2

カップ用のDockerイメージを作成しようとしています。実行するステップの1つは、 "Listen"ディレクティブをコメントアウトすることです。サンプルのビルドからこの出力は、問題を示していますsedのインライン置換がDockerfileから機能しない

Step 8 : RUN sed "s/^Listen /#Listen /" /etc/cups/cupsd.conf | grep Listen 
---> Running in 6b9dfeeaec7a 
#Listen localhost:631 
#Listen /var/run/cups/cups.sock 
---> 1737a534589d 
Step 9 : RUN sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf 
---> Running in aacd768eb94c 
---> dbe12c2073ef 
Step 10 : RUN grep "Listen" /etc/cups/cupsd.conf 
---> Running in 650b27ecf7c4 
Listen localhost:631 
Listen /var/run/cups/cups.sock 
---> bf03b9f5de35 
Successfully built bf03b9f5de35 

なぜ完全grep仕事にパイプますsedの最初の呼び出しは行いますが、-iフラグを有する第二には、変更しませんか?

コンテナを対話的に実行して(docker run -it cups sh)、コマンド(sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf)をコピー&ペーストすると、期待どおりに変更されます。

ここでフルDockerfileです:

FROM ubuntu:16.04 

RUN apt-get --quiet update && apt-get --quiet --assume-yes --allow-downgrades --allow-remove-essential --allow-change-held-packages dist-upgrade 

# Install cups 
RUN apt-get install --quiet --assume-yes --allow-downgrades --allow-remove-essential --allow-change-held-packages cups 

VOLUME /etc/cups/ 

EXPOSE 631 

RUN apt-get install --quiet --assume-yes --allow-downgrades --allow-remove-essential --allow-change-held-packages less vim 

RUN sed -i "s/^Listen /#Listen /" /etc/cups/cupsd.conf 

ビルドコマンドは次のとおりです。docker build --tag cups:test .

Runコマンドは次のとおりです。docker run -it cups:test bash

docker info出力:

Containers: 9 
Running: 6 
Paused: 0 
Stopped: 3 
Images: 61 
Server Version: 1.12.1 
Storage Driver: aufs 
Root Dir: /mnt/storage/var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 65 
Dirperm1 Supported: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: host bridge null overlay 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor 
Kernel Version: 4.4.0-31-generic 
Operating System: Ubuntu 16.04.1 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 4 
Total Memory: 3.555 GiB 
Name: servy 
ID: LJZV:A2VY:BZPY:HHQX:DWSP:IAMK:XI43:Q7BA:YKVU:ONQX:VBHJ:GXRT 
Docker Root Dir: /mnt/storage/var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
Insecure Registries: 
127.0.0.0/8 

出力から:

Docker version 1.12.1, build 23cf638 

おかげ

+0

完全なDockerfileを投稿してください。私はあなたの問題を再現しようとしましたが、私にとってはインライン置換が働きます。 –

+0

また、 'docker info'の出力が参考になります。 –

+0

ありがとうございました!私は 'docker info'と問題を再現する完全なDockerfileを追加しました。私は実際にこれを取得し、ビルドディレクトリに完全な設定ファイルを置くことで実行していますが、イメージに卸売りコピーされますが、 'sed 'を使ってビルドしていないのはなぜか不思議です。彼らがあまりにも広範でない限り、configファイルの特定の編集を列挙することは、パッケージメンテナーのconfigファイルのバージョンにどのような変更を加えたのかを正確に文書化することだと思います。私はそれについてもコメントを使うことができると思う。 – Dave

答えて

4

問題がである:、その行の後

VOLUME /etc/cups/ 

の/ etc /カップ(最終容器に見られないかもしれないいくつかの単一ファイルへの変更コピーコマンドが適用されるため、完全ではありません)。

ボリューム行を最後まで移動するか、イメージから完全に削除することをお勧めします。これらのエントリは、後でこのフォルダの変更でイメージを拡張する機能をブロックします。そして、あなたはいつでも自分のボリュームを作ることができます(docker run -v ...またはdocker-compose.yml内)。イメージにボリュームを作成すると、イメージを実行した後に匿名のボリュームがdocker volume lsに表示されます。

+0

うん、それだった。私の考えは「私が最後に取り組んでいるものを入れて、私が実験したときに最も多くのステップをキャッシュしています」。ビルド中にそのような方法でボリュームが動作していなかったら、 'run -v'スイッチがより汎用的であるという良い点を作ってください。ありがとう! – Dave

+0

@BMitchこれはなぜですか? – stantonk

+0

Dockerfileで定義されたボリュームは、このようなものを壊します。使用しないでください。 docker-compose.ymlのように、実行時にボリュームを定義してください。 – BMitch

関連する問題