在Docker上安装Crystal:如何在Docker文件中把Crystal资源库添加到Docker上

Dockerfile (摘录)

ENV APT_KEY_DONT_WARN_ON_DANGEROUSAGE=DontWarn
RUN apt-get update && apt-get install -y\.
         software-perties-common (软件属性)。
         build-essential(重要的)。
         libevent-dev
         libssl-dev
         libxml2-dev
         libyaml-dev
         libgmp-dev
         libreadline-dev
         apt-transport-https
         iputils-ping
         git\
         aptitude (能力)。
         nano (纳米)。
         openssh-server (开放服务器)。
         && apt-key adv -keyserver keys.gnupg.net -recv-keys 09617FD37CC06B54\a
         && add-apt-repository 'deb https://dist.crystal-lang.org/apt crystal main' (水晶主)。
         && apt-get update \
         && apt-get install -y crystal \
         && rm -rf /var/lib/apt/lists/* \ rm -rf
         && mkdir /root/.ssh

ǞǞǞ env apt_key_dont_warn_on_dangerouse_usage需要 为使apt-key adv不因不是从终端运行而窒息。

要添加Crystal资源库,需要安装密钥

W: GPG错误。 https://dist.crystal-lang.org/apt crystal InRelease:以下签名无法被验证,因为公钥不可用。no_pubkey 09617fd37cc06b54
E: 储存库的'https://dist.crystal-lang.org/apt crystal InRelease'没有签名。

当你使用Dockerfile添加密钥时,你可能会得到以下错误信息。

正在执行。/tmp/apt-key-gpghome.daecBAEPSJ/gpg.1.sh -keyserver keys.gnupg.net -recv-keys 09617FD37CC06B54
gpg: 密钥服务器接收失败。无法分配请求的地址

这是由于 gpg 无法与 IPv6 地址绑定。因此,你必须

在你的主机上为Docker启用IPv6支持。

编辑/创建 /etc/docker/daemon.json

{
  "ipv6": true,
  "fixed-cidr-v6":"2001:db8:1::/64"
}

并重新启动docker服务。

Service docker restart


固定的cidr-v6是 可选为 https://docs.docker.com/config/daemon/ipv6/ 可能导致你相信。

测试对IPv6的支持。

docker run -it alpine ash -c "ip -6 addr show dev eth0; ip -6 route show"
如果它没有返回任何信息,那么ipv6就没有启用
启用IPv6时的输出示例:

max@morpheus:~/docker$ docker run -it alpine ash -c "ip -6 addr show dev eth0; ip -6 route show"
163: eth0@if164: mtu 1500 状态 UP
     inet6 2001:db8:1::242:ac11:2/64 scope global flags 02
        永远的有效期限首选期限
     inet6 fe80::42:acff:fe11:2/64 范围链接暂定
        永远的有效期限首选期限
2001:db8:1::/64 dev eth0 metric 256
fe80::/64 dev eth0 metric 256
默认通过 2001:db8:1::1 dev eth0 metric 1024
ff00::/8 dev eth0 metric 256



启动Docker应用容器引擎失败。

tail -n 50 /var/log/syslog

Jan 11 21:39:35 morpheus dockerd[697]: time="2019-01-11T21:39:35.770500563+01:00″ level=warning msg="Your kernel does not support swap memory limit"
Jan 11 21:39:35 morpheus dockerd[697]: time="2019-01-11T21:39:35.770617796+01:00″ level=warning msg="Your kernel does not support cgroup rt period"
Jan 11 21:39:35 morpheus dockerd[697]: time="2019-01-11T21:39:35.770656361+01:00″ level=warning msg="Your kernel does not support cgroup rt runtime"

Jan 11 21:39:40 morpheus dockerd[697]: time="2019-01-11T21:39:40.800355314+01:00″ level=info msg="默认桥(docker0)被分配了一个IP地址172.17.0.0/16。守护者选项-bip可以用来设置一个首选的IP地址"

Jan 11 21:39:40 morpheus dockerd[697]。启动守护进程出错。初始化网络控制器错误。 创建默认 "桥接 "网络出错:在默认值中找不到可用的、不重叠的IPv6地址池来分配给网络。

如果docker守护进程没有启动,请查看/var/log/syslog来寻找原因。

在这里,它可能意味着 你没有添加 fixed-cidr-v6 正如我在上面指出的那样!Docker,从几个版本开始,似乎需要这个。在GitHub上有一个关于它的问题。

而这一切是为了......。

形象

参考文献

https://github.com/inversepath/usbarmory-debian-base_image/issues/9

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/ipv6/

https://github.com/moby/moby/issues/36954