#name #nss #id #finding #host #run

nss-docker-ng

NSS 插件,通过 ID 或名称查找 Docker 容器

8 个稳定版本

1.0.7 2024 年 7 月 21 日
1.0.5 2024 年 4 月 24 日
1.0.4 2024 年 3 月 13 日
0.9.0 2024 年 2 月 25 日

#168Unix API

Download history 167/week @ 2024-04-20 18/week @ 2024-04-27 2/week @ 2024-05-04 156/week @ 2024-05-18 8/week @ 2024-05-25 108/week @ 2024-07-20 27/week @ 2024-07-27

135 每月下载次数

MITLGPL-3.0

35KB
542 代码行

QC crates.io

简介

nss-docker-ng 是一个通过 ID 或名称查找 Docker 容器的 NSS 插件。

容器名称将在虚拟域名 .docker 中搜索。

安装后,尝试

$ docker run --name my-app -d hashicorp/http-echo -listen=:80 -text="✅ it works!"
04e8b7ccf6215a17064ec0d15d4235d5c62c461bc26a681c8ee64344bb0dc2df

$ getent hosts my-app.docker
172.17.0.4      my-app.docker 04e8b7ccf621.docker

$ curl http://my-app.docker
 it works!

$ ping my-app.docker
PING test.docker (172.17.0.4) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.171 ms

$ docker stop my-app

子域名/通配符行为

您可以通过设置标签 .com.github.petski.nss-docker-ng-container-subdomains-allowedtrueTrue1,使 nss-docker-ng 响应容器的所有子域名。

$ docker run --name my-app-with-subdomains -d --label=".com.github.petski.nss-docker-ng.container-subdomains-allowed=true" hashicorp/http-echo -listen=:80 -text="✅ it works!"
670b3dc0aa2761d0fa150180e1cc1769d5e7e5a3332c12562197c7a782ed8a94

$ getent hosts my-app-with-subdomains.docker
172.29.0.2      my-app-with-subdomains.docker 670b3dc0aa27.docker

$ getent hosts foo.my-app-with-subdomains.docker
172.29.0.2      my-app-with-subdomains.docker 670b3dc0aa27.docker foo.my-app-with-subdomains.docker

$ docker stop my-app-with_subdomains

安装说明

二进制安装

DESTDIR="/usr/local/lib/nss-docker-ng/" && \
 sudo --preserve-env=DESTDIR install -m 0755 -d "$DESTDIR" && \
 curl -sL 'https://github.com/petski/nss-docker-ng/releases/latest/download/libnss_docker_ng.so' -o - | sudo --preserve-env=DESTDIR tee "${DESTDIR}/libnss_docker_ng.so" > /dev/null && \
 echo "${DESTDIR}" | sudo tee /etc/ld.so.conf.d/nss-docker-ng.conf > /dev/null && \
 sudo /sbin/ldconfig

然后,将 docker_ng 服务添加到 /etc/nsswitch.conf 中的 hosts:-行。例如:hosts: files docker_ng dns

Ubuntu 22.04 "jammy" 及更高版本

sudo add-apt-repository ppa:petski/ubuntu/nss-docker-ng && \
 sudo apt install nss-docker-ng

从源码安装

您至少需要 gitcargopatchelf

git clone https://github.com/petski/nss-docker-ng.git
cd nss-docker-ng
cargo build --release && \
 patchelf --set-soname libnss_docker_ng.so.2 target/release/libnss_docker_ng.so && \
 DESTDIR="/usr/local/lib/nss-docker-ng/" && \
 sudo --preserve-env=DESTDIR install -m 0755 -d "$DESTDIR" && \
 sudo --preserve-env=DESTDIR install -m 0644 target/release/libnss_docker_ng.so "${DESTDIR}/libnss_docker_ng.so" && \
 echo "${DESTDIR}" | sudo tee /etc/ld.so.conf.d/nss-docker-ng.conf > /dev/null && \
 sudo /sbin/ldconfig

然后,将 docker_ng 服务添加到 /etc/nsswitch.conf 中的 hosts:-行。例如:hosts: files docker_ng dns

贡献

欢迎贡献!如果没有东西可以贡献,但您确实欣赏这个软件?请为这个仓库点星 ⭐。

开发

cargo build && \
 patchelf --set-soname libnss_docker_ng.so.2 target/debug/libnss_docker_ng.so && \
 DESTDIR="/usr/local/lib/nss-docker-ng/" && \
 sudo --preserve-env=DESTDIR install -m 0755 -d "$DESTDIR" && \
 sudo --preserve-env=DESTDIR install -m 0644 target/debug/libnss_docker_ng.so "${DESTDIR}/libnss_docker_ng.so" && \
 echo "${DESTDIR}" | sudo tee /etc/ld.so.conf.d/nss-docker-ng.conf > /dev/null && \
 sudo /sbin/ldconfig

getent hosts not-existing-container.docker
# Failed to inspect container 'not-existing-container': error 404 Not Found - No such container: not-existing-container

比较

还有其他选项可以实现这个功能。我在 这里 进行了比较。

有用的链接

依赖项

~11–22MB
~349K SLoC