首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Nixos docker镜像上安装Nix包?

如何在Nixos docker镜像上安装Nix包?
EN

Stack Overflow用户
提问于 2020-07-19 22:23:35
回答 1查看 336关注 0票数 0

简而言之:我需要在Docker镜像中包含file实用程序。源环境和目标环境都是NixOS。我如何定义docker镜像,以便另一个可执行文件可以调用它,或者任何其他预打包的可执行文件?

更长的版本:我已经成功地构建了一个docker镜像,我将一个预编译的可执行文件复制到适当的位置。该可执行文件现在需要调用file实用程序来识别各种文件的mime类型,这就是我遇到的问题。

我在shell.nix中使用buildInputs的方式并没有达到预期的效果。有人能告诉我我需要的线索吗?

我的docker.nix如下:

代码语言:javascript
运行
复制
with import <nixpkgs> {};

let
    foobar_deriv = stdenv.mkDerivation rec {
        name = "foobar";
        builder = "${bash}/bin/bash";
        args = [ ./nix-builder.sh ];
        inherit coreutils openssl libyaml;
        system = builtins.currentSystem;
        schemapath = ../../schemas;
        foobarpath = ./foobar;

        buildInputs = [
            pkgs.bash
            pkgs.file
        ];
        env = buildEnv {
            name = name;
            paths = buildInputs;
        };

    };

    ld_path = stdenv.lib.makeLibraryPath [
        pkgs.openssl
        pkgs.libyaml
    ];

    entrypoint = writeScript "entrypoint.sh" ''
    #!${stdenv.shell}
    export LD_LIBRARY_PATH=${ld_path}
    exec $@
    '';

in
pkgs.dockerTools.buildImage {
    name = "myaccount/foobar";
    tag = "0.3.0a11";
    created = "now";

    contents = foobar_deriv;

    config = {
        Cmd = [ "foobar" ];
        Entrypoint = [ entrypoint ];
        ExposedPorts = {
            "4949/tcp" = {};
        };
        WorkingDir = "/";
    };
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-19 23:10:26

答案比我预期的要简单:如果您将contents定义为一个列表而不是一个原子,那么派生将被组合到最终的图像中。

对于这个特定的情况,解决方案是更改

代码语言:javascript
运行
复制
contents = foobar_deriv;

代码语言:javascript
运行
复制
contents = [ foobar_deriv file ];

在实践中,我添加了更多的实用程序,这样我就可以根据需要四处查看,所以它变成了

代码语言:javascript
运行
复制
contents = [ foobar_deriv file bash which coreutils ];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62981500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档