我正在尝试为 docker 容器设置 iptables 规则。我正在使用nsenter在容器的网络命名空间内执行 iptables 命令:
# log access to port 8080
PID=$(docker inspect --format "{{.State.Pid}}" $ID)
/home/ubuntu/nsenter -n -t $PID iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 8080 -j LOG
Run Code Online (Sandbox Code Playgroud)
除了LOG规则之外,这种方法非常有效。那些似乎没有在任何地方登录。请注意,应用于主机系统的相同规则有效并记录到/var/log/kern.log.
我在哪里可以找到这些日志规则的输出?这是网络命名空间的已知问题/限制吗?
我不是LXC专家,但据我所知,它与linux-vserver非常相似。
如果这是正确的,我想知道为什么在已经拥挤的虚拟化阵营中还有另一个玩家?LXC 提供(或承诺)什么是 linux-vserver 没有的?
我是 linux-vserver 的长期用户,我记得大约在很多年前,在所有这些虚拟化炒作之前。最近开发速度放缓,但从未完全停止 - 我知道是因为开发人员帮助我将其恢复到 linux/hppa 上的有用状态(至少在 Gentoo 中)。他们定期推出针对最新内核的补丁,使用所有最新的好东西(LXC 使用的相同容器基础架构),甚至与 GRsecurity 集成。
开始 LXC 工作的人可能有充分的理由这样做,而不是加入已经完善的 linux-vserver 基础?那我想知道。
这都是关于主线集成的吗?那么为什么不采用 linux-vserver 进行集成,就像 Xen 人对 XenLinux 所做的那样?
我目前正在努力限制我调用的用户的进程数sandbox。
我在里面配置了进程限制,/etc/security/limits.conf如下所示:
sandbox hard nproc 100
Run Code Online (Sandbox Code Playgroud)
但是如果我想以sandbox用户身份连接到容器,ssh 会返回:
shell request failed on channel 0
Run Code Online (Sandbox Code Playgroud)
所以我登录root并检查了sandbox用户正在运行的进程数,但它少于 5。
那么是什么阻止了我通过 ssh 登录?
没有为sandbox用户设置限制 ssh 登录工作正常。
或者有没有其他方法可以防止分叉炸弹攻击?
Kubernetes 正在弃用 Docker 作为 CRI 引擎。现在有containerd和CRI-O,可以作为它的替代品。两者都可以通过 cri-tools 中的 crictl 进行管理。
我需要一些通用的方法来查找正在运行的容器的 PID。
实际上我需要一个相当于 docker 命令的crictl :
# docker inspect 86cd8d605c2da -f '{{ .State.Pid }}'
9625
Run Code Online (Sandbox Code Playgroud) 当我们需要使用此容器部署应用程序时,我正在寻找红帽赞助的容器映像的最佳实践:通用基础映像。
许多第三方应用程序需要 AppStream 中的软件包,而 RHEL 的 AppStream 和ubi-8-appstream.
我们可以使用该包harfbuzz作为示例,在运行的 RHEL 8.5 上我们有可用的开发包:
harfbuzz-1.7.5-3.el8.x86_64
harfbuzz-icu-1.7.5-3.el8.x86_64
harfbuzz-devel-1.7.5-3.el8.x86_64
Run Code Online (Sandbox Code Playgroud)
但ubi-8-appstream只有运行时包可用,可以直接在其repo上看到。
在这种情况下,获取开发包的正确方法是什么?添加 RHEL 的 AppStream 似乎不是一个好主意,这也会引发subscription-manager问题。
我在这里缺少什么?
我目前正在构建一个我想部署到 Docker 容器的应用程序。
容器将在我的服务器上运行。我希望能够在同一台服务器上运行其他应用程序,而不会增加运行的 Docker 映像的数量。
截至目前,不同的零件/容器是:
我的一般想法是每个不同的部分都应该作为一个容器运行。我担心的是,如果我要在同一台机器上运行另一个应用程序,我最终会用大量无法处理的链接图像来膨胀它。
这可以通过为每个应用程序制作一个图像来解决。这样上述服务将成为一个图像的一部分。这首先与 Docker 的整体安全性或目的冲突吗?
在一个 Docker 镜像中拥有多个服务是否与 Docker 的目的冲突?
当从一个镜像运行服务时,容器的整体安全优势会被消除吗?
在我的公司,我们目前正在开发一种产品,该产品最终将支持通过 OpenLDAP 和 Active Directory 进行身份验证。我们已经配置了 Windows Server 2016,并希望通过 Windows 容器创建一个隔离的环境来测试我们的应用程序。
不幸的是,在容器中安装/启用 AD 功能时,我遇到了障碍。我收到的错误是:
Add-WindowsFeature : The request to add or remove features on the specified server failed.
The operation cannot be completed, because the server that you specified requires a restart.
At line:1 char:1
+ Add-WindowsFeature AD-Domain-Services
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : DeviceError: (@{Vhd=; Credent...Name=localhost}:PSObject) [Install-WindowsFeature], Exception
+ FullyQualifiedErrorId : DISMAPI_Error__Failed_Reboot_Required,Microsoft.Windows.ServerManager.Commands.AddWindowsFeatureCommand
Run Code Online (Sandbox Code Playgroud)
我错过了什么,或者这只是不起作用?
这是我的 Dockerfile
FROM microsoft/windowsservercore
RUN powershell Get-WindowsFeature
RUN powershell -Command Add-WindowsFeature AD-Domain-Services
Run Code Online (Sandbox Code Playgroud)
完整的构建日志:
PS C:\windows-ad> docker build …Run Code Online (Sandbox Code Playgroud) 一旦我在 Ubuntu 盒子上重新启动了 docker 服务,它就service docker restart启动了一些我没想到它会启动的容器。
这是为什么?哪个配置文件/存储/任何内容保存有关应启动哪些映像的信息?
当我用 . 列出它们时,我有很多图像(~50)docker images。但当我启动时只有 8 个启动dockerd。为什么?我该如何解决这个问题?
谢谢。
想象一下这个场景。
我如何为这个容器分配 192.168.0.3 的 IP?
我需要服务在他们设计的默认端口上运行。
我不能使用反向代理作为解决方案,因为这并不能解决如何通过 SSH 与 GitLab 实例通信的问题。
在这种情况下,将端口 22 映射到主机上的不同端口是不专业的,我的客户端开发人员不会喜欢这种设置。
如果我正在启动此应用程序的许多实例,这也将很难维护。并且必须为每个容器将每个 SSH 映射到主机上的新端口。
我的客户需要能够在没有额外配置客户端的情况下解析和运行以下内容。
https://GitLab.internal.net.work
ssh git 克隆https://GitLab.internal.net.work
我已经查看了 Docker 网络文档,除非我弄错了,否则我看不到一个易于维护的解决方案(尽管我还是 Docker 的新手)。
如何才能做到这一点?在这种情况下,其他人在做什么作为“最佳实践”?(如果可能,请以 docker-compose 语法的形式给出答案)。
containers ×10
docker ×5
kubernetes ×2
linux ×2
lxc ×2
ssh ×2
iptables ×1
networking ×1
pam ×1
redhat ×1
redhat-ubi ×1