我有两个非特权容器,我想在它们之间共享一个 unix 套接字。每个容器在主机上都有自己的用户,并具有单独的 subuid 和 subguid 映射。
我尝试在容器中创建组并将它们映射到主机上的一个组。但是,这不起作用。我不想创建额外的用户,以尽可能减少所涉及的用户数量和潜在的安全漏洞,而不会将容器相互暴露。
给定 podman 安装在 linux 系统和一个名为 baz.service 的 systemd 单元上:
# /etc/systemd/system/baz.service
[Service]
ExecStart=/usr/bin/podman run --rm --tty --name baz alpine sh -c 'while true; do date; sleep 1; done'
ExecStop=/usr/bin/podman stop baz
Run Code Online (Sandbox Code Playgroud)
然后 baz.service 启动:
# systemctl daemon-reload
# systemctl start baz.service
Run Code Online (Sandbox Code Playgroud)
然后当我检查单元的状态时,我在 /system.slice/baz.service cgroup中看不到shorsleep进程
# systemctl status baz
? baz.service
Loaded: loaded (/etc/systemd/system/baz.service; static; vendor preset: enabl
Active: active (running) since Sat 2019-08-10 05:50:18 UTC; 14s ago
Main PID: 16910 (podman)
Tasks: 9
Memory: 7.3M
CPU: …Run Code Online (Sandbox Code Playgroud) 我查看了 stackexchange 站点,但找不到任何内容。我查看了 Linux 容器https://en.wikipedia.org/wiki/LXC以及管理程序https://en.wikipedia.org/wiki/Hypervisor上的维基百科条目,但对两者的解释都超出了没有工作过也不会明白。我还看到了http://www.linux.com/news/enterprise/cloud-computing/785769-containers-vs-hypervisors-the-battle-has-just-begun但这也没有解释。
我玩过虚拟机之类的虚拟机。我对虚拟机的有限理解的一个起始想法可能是在沙盒环境中测试软件(当您无法购买/负担得起机器并且仍然对您正在开发的软件有一些想法时拥有一个 Solaris 盒子因为该目标硬件正在工作。)虽然它使用受到限制。这可能也是它在云计算领域取得飞跃的方式之一。问题很广泛,所以这就是我提炼它的方式-
有人能解释一下 hypervisor 和 *nix 容器是什么(如果可能的话,用类比)?
*nix 管理程序与虚拟机相同还是有区别?
我正在关注本教程
https://docs.docker.com/articles/networking/#between-containers
我使用了以下命令
$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.0.160/24 dev bridge0
$ sudo ip link set dev bridge0 up
# Confirming that our bridge is up and running
$ ip addr show bridge0
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.160/24 scope global bridge0
valid_lft forever preferred_lft forever
# Tell Docker about it and restart (on Ubuntu)
$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
$ sudo service docker …Run Code Online (Sandbox Code Playgroud) 在阅读 systemd-nspawn 时,提到它不应该在生产环境中使用。原因似乎是缺乏管理和部署基础设施。实用性是唯一的原因,还是也有潜在的安全/功能原因?
我有一个systemd正在运行的容器,我可以使用machinectl login <container>. 如何直接在容器内执行命令,即无需先登录,执行命令,然后注销?
另一种说法是,我正在寻找systemd相当于:
$ docker exec <container> <command>
Run Code Online (Sandbox Code Playgroud)
或者
$ ssh <host> <command>
Run Code Online (Sandbox Code Playgroud) 我试图将 OpenVPN 服务器 dockerize(进入 Debian 8.2)(是的,我知道,已经有这样的容器)但是容器内部出现问题,服务器无法启动。
我决定检查日志,但是/var/log/syslog(我的主机上的 OpenVPN 日志)在容器内丢失。
我认为rsyslog没有安装并在 OpenVPN 安装之前将其安装添加到 Dockerfile。但这没有任何效果,syslog仍然丢失了。
我的 Dockerfile 是:
FROM debian:8.2
USER root
EXPOSE 53/udp
EXPOSE 1194/udp
EXPOSE 443/tcp
RUN apt-get update
RUN apt-get install -y rsyslog
RUN apt-get install -y openvpn
# ...
# Some configuration stuff
# ...
ENTRYPOINT service openvpn start && sh
Run Code Online (Sandbox Code Playgroud)
问题是:
为什么 OpenVPNsyslog在我的主机 Debian 8.2 上默认安装后登录,而不是在容器内登录?我没有在我的主机上配置任何东西来强制 OpenVPN 日志到syslog. 这是默认行为。
如何配置在 docker 容器内运行的 OpenVPN 服务器的日志记录?
我正在尝试--privileged在 systemd 容器中创建一个粗略的 Docker 等价物,但我不知道如何允许容器访问主机上的所有可用设备(无需手动枚举它们)。
我从 systemd-nspawn 容器中遇到了Access usb 设备,并--privileged在https://github.com/rkt/rkt/issues/2962#issuecomment-235444606看到了一个很好的描述,但我不知道如何将这些位放在一起。
我也尝试了天真,--bind=/dev但这样就没有标准输出并且容器从未启动。
任何提示如何处理这个?
我看到使用 kubernetes 可以为某些工作负载设置节点关联。我想知道在各种容器技术(例如 docker、rocket 等)中是否有任何设施可以让您将进程固定到核心?或者这在多租户环境中是否可行?也许这意味着裸机设置?
是否有命令可以检查容器服务是否在 Linux 系统上运行?有人建议,unshare但我不确定这是否是最好的方法。