以下のようにDockerイメージを構築しようとしています。http://lethalman.blogspot.com/2016/04/cheap-docker-images-with-nix_15.html
default.nix
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
let
entrypoint = writeScript "entrypoint.sh" ''
#!${stdenv.shell}
set -e
# allow the container to be started with `--user`
if [ "$1" = "redis-server" -a "$(${coreutils}/bin/id -u)" = "0" ]; then
chown -R redis .
exec ${goPackages.gosu.bin}/bin/gosu redis "$BASH_SOURCE" "$@"
fi
exec "$@"
'';
in
dockerTools.buildImage {
name = "redis";
runAsRoot = ''
#!${stdenv.shell}
${dockerTools.shadowSetup}
groupadd -r redis
useradd -r -g redis -d /data -M redis
mkdir /data
chown redis:redis /data
'';
contents = [ redis ];
config = {
Cmd = [ "redis-server" ];
Entrypoint = [ entrypoint ];
ExposedPorts = {
"6379/tcp" = {};
};
WorkingDir = "/data";
Volumes = {
"/data" = {};
};
};
}
ただし、これにより次のエラーが発生します。
nix-build
error: undefined variable 'goPackages' at /home/chris/temp/nix/default.nix:12:14
(use '--show-trace' to show detailed location information)
この問題をどのように解決できますか?
答え1
gosu
今利用可能:${pkgs.gosu.bin}
つまり、次のものを交換してください。
exec ${goPackages.gosu.bin}/bin/gosu redis "$BASH_SOURCE" "$@"
そして:
exec ${pkgs.gosu.bin}/bin/gosu redis "$BASH_SOURCE" "$@"
何が起こっているのかを知っている人がいる場合は、知っておくとgoPackages
便利です。
他の人も同じエラーが発生する可能性があると考えて、この質問/回答を投稿します。