我正在尝试设置一个服务器,我将在其中运行多个应用程序。主要是内部的,但也可能是像 Redmine 这样的开源项目。它们都是在无头浏览器上运行的 Rails/Ruby 应用程序/测试脚本。本质上,我试图在内部设置一个类似 heroku 的环境,并希望在这些正在运行的进程之间进行某种进程隔离。
我首先偶然发现了 chroot jails,然后了解了 LXC。LXC 似乎对普通的 chroot jails 提供了更好的控制。我有一个 nginx 前端,我想在隔离的容器中运行网络服务器应用程序进程(thin/mongrel/webrick)。通常我们只是在本地 IP 地址上启动这些进程,并为它们设置 nginx 代理。完成这项工作的最佳方法是什么?人们是否为容器设置了静态桥接 IP 并让 nginx 指向它?如何确保容器中运行的网络服务器只能由外部主机访问?
关于 LXC 的文档似乎有点稀疏。指向一些好的教程或 HOWTO 的指针将不胜感激。我的目标部署环境是一个 Lucid 64 位盒子。
PS我不是Linux大师。所以,要温柔。
我读过容器化比虚拟化便宜;我知道容器化使用的资源比虚拟化少,因为只涉及一个操作系统,没有虚拟化硬件。
但是我是否需要一个支持虚拟化的 CPU 来运行 Docker 等容器化,或者因为它在容器中运行使用操作系统库的应用程序,我可以在没有虚拟化的情况下在 CPU 上运行它吗?
我有一个带有几个 lxc 容器的服务器。在一些容器中安装了 docker。通常在这些LXC容器导致容器名称,格式为泊坞窗撰写的动作appname_service_1,如wordpress_app_1和wordpress_db_1,当app和db两个服务,被称为在wordpress撰写文件-你知道它。
但是今天我创建了另一个 LXC 容器并在其中安装了 docker。由于ansible,设置与其他容器相同。但是,docker 容器名称不同,例如wordpress_db_1_c9de200f9abd. 每当我删除容器并重新创建它时,最后的哈希值都会有所不同。
由于这使得容器不像它们应该的那样一次性,因为它破坏了容器之间的任何路由,我想知道为什么要附加这些哈希。所有 LXC 容器都安装了相同的 docker 和相同的 docker-compose 版本。我想在我的 docker 容器名称中完全阻止这些哈希。
为什么它们现在发生而以前没有发生?
我在让 LXC 实例获取 IPv4 地址方面取得了有限的成功。它在创建时有效,但如果我重新启动主机,所有地址都会丢失。
主机 Ubuntu 21.10
客户端版本:4.21
服务器版本:4.21
镜像 Ubuntu 21.10
tgl@electra : ~ $ lxd 版本 4.21 tgl@electra : ~ $ lxc 版本 客户端版本:4.21 服务器版本:4.21 tgl@electra : ~ $ lxc 列表 +---------+---------+------+------------------------ ------------------------+------------------------+------------+ | 姓名 | 状态 | IPV4 | IPV6 | 类型 | 快照 | +---------+---------+------+------------------------ ------------------------+------------------------+------------+ | 玛丽亚数据库 | 跑步 | | fd42:594a:5292:77f3:216:3eff:fe3c:7abe (eth0) | 集装箱| 0 | +---------+---------+------+------------------------ ------------------------+------------------------+------------+ | nginx1 | 跑步 | | fd42:594a:5292:77f3:216:3eff:fe85:b910 (eth0) | 集装箱| 0 | +---------+---------+------+------------------------ ------------------------+------------------------+------------+ | …
我在 ubuntu 14.04 上使用 lxc 用户空间工具,我想在容器内执行一些压力测试和基准测试。我知道 free 和 htop 在容器中不能正常工作。
我在容器中使用 dd 和 bonnie++ 来强调它是 SSD 的硬盘。
现在在主机端,使用 iotop 我可以看到使用的读写 io 带宽,但在 cgroups 中我确实有不同的结果。cgroup 仅捕获一小部分服务字节,而 iotop 显示数百兆字节的带宽使用情况。
在 cgroups 中,我正在捕获此条目:/sys/fs/cgroup/lxc/disk_stress/blkio.throttle.io_service_bytes
任何想法为什么值不相等?哪一个是正确的?
我已经在两个只能通过中间服务器(我没有 su 权限)进行通信的 ubuntu 主机上安装了 lxd。我已经在我的本地主机上创建了一个容器,现在希望在远程服务器上加载容器。
我查阅了lxc/lxd 存储库中的basic.sh测试脚本以确认我使用的是正确的方法(我在此过程中发现我误解了图像与容器)。
我在我的本地主机上创建了一个容器测试,在其中安装了所有必要的东西,停止它,发布它,并执行以下命令:
lxc image export test
Run Code Online (Sandbox Code Playgroud)
这给了我一个 tarball 42cf01c53cb9e...83e3c48.tar.gz(在此处缩短),如文档中所述(我正在运行 lxc 和 lxd 版本 2.0.0.beta3)。尝试通过以下方式在同一主机上导入该图像
lxc image import 42cf01c53cb9e...83e3c48.tar.gz --alias testimage
Run Code Online (Sandbox Code Playgroud)
产生错误:
exit status 2 (tar: metadata.yaml: Not found in archive)
Run Code Online (Sandbox Code Playgroud)
该basic.sh脚本使我相信,我是下虽然正确的路由(除了将tar.gz VS tar.xz descrepancY)。我能够导出标准图像并获取 .xz 文件(当我使用 lxd-images 获取它们时)。例如,
lxd-images import ubuntu --alias ubuntu
lxc image export ubuntu
Run Code Online (Sandbox Code Playgroud)
生成一个meta-ubuntu...tar.xz和ubuntu...tar.xz文件,可以导入(在不同的服务器上)
lxc image import meta...tar.xz rootfs ubuntu...tar.xz --alias imported_ubuntu
Run Code Online (Sandbox Code Playgroud)
如何在主机之间复制容器?
谢谢!
编辑:我进一步调查并发布了我的测试容器,它创建了它的图像。然后我在导出时得到了 .gz 文件(没有元数据)。如果我从原始图像中劫持元数据,那么我将无法启动容器,尽管导入不再对我崩溃——我显然不知道我在做什么。使用 lxd …
我想理解容器与虚拟机的所有不同之处。对于这两种虚拟化方法,都可以观察到具有所有操作系统的文件系统。但是在 Docker 容器中,例如 centos 5.x,如果我uname -a在容器的 shell 中执行,输出会显示我的主机内核版本。它是如何工作的以及与经典虚拟机(vmware、virtualbox、xen 等)的主要区别?
我正在 Vagrant 中尝试 lxc/lxd,但我对它还很陌生。我设法创建正在运行的容器,但无法从其中 ping 任何内容(包括 8.8.8.8)。我可以从顶级非虚拟系统 ping 其 IP,但它拒绝 SSH 连接。我只能使用 直接从直接容器的主机(Vagrant)进入容器lxc exec my-container /bin/bash。
我尝试在该routed模式下设置我的容器,但出于学习目的,我仍然需要它。不过 LXD/LXC 文档似乎有些缺乏。
我尝试遵循此说明:https://blog.simos.info/how-to-get-lxd-containers-get-ip-from-the-lan-with-routed-network/但它不起作用我到底。我可能会错过一些东西,因为我还不熟悉 Linux 网络。
我的 Vagrant 主机正在运行Ubuntu 20.04。
我的 LXC 容器正在运行Debian 10。
我的 Vagrant 主机上的 LXC 配置:
config:
core.https_address: '[::]:8443'
core.trust_password: true
networks: []
storage_pools:
- config:
source: /home/luken/lxd-storage-pools
description: ""
name: default
driver: dir
profiles:
- name: default
config: {}
description: ""
devices:
root:
path: /
pool: default
type: disk
- …Run Code Online (Sandbox Code Playgroud) 愚蠢的错误导致了这一切,请阅读更新 5
我正在尝试使用 IPv6 设置 Linux 路由器(LXC,3.10.0-123.el7.x86_64)。
提供者是 Hetzner,我有 2 个子网,一个 /56 和一个 /64。他们已经设置了到我的 LL 地址的路由,我的默认网关是 fe80::1。
我在 sysctl.conf 中启用了 ipv6 和 ipv4 转发:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Run Code Online (Sandbox Code Playgroud)
我将 IPTables 配置为接受所有内容。
我知道这ICMPv6是用于 IPv6 中路由的主要实用程序 - 所以它不会被阻止 ;-)。我还补充道-A FORWARD -j ACCEPT。
我已将 /56 子网的第二个 (::2) ip 配置为 eth1,将 /64 的第二个 (::2) ip 配置为 eth0。
eth0 为上行接口 eth1 为 LAN 接口
所以现在是主要问题。
具有来自 /56 的 ipv6 地址的内部客户端无法 ping 外部世界,但数据包和响应被正确路由,直到我的路由器,它只是在没有任何提示的情况下丢弃数据包。
例如 ping6 ipv6.google.com 导致超时
但在路由器的上行链路上我得到:
20:43:13.350932 IP6 …Run Code Online (Sandbox Code Playgroud) 我有一个系统(“主机”),使用 LXC(即“来宾”)运行多个容器。我已经在来宾中安装了 Jenkins,它们似乎按预期工作,只是它们不响应请求。(我之前已经成功安装过几次 Jenkins,包括 LXC。)在这种情况下,观察到的问题是内置 Jenkins Web 服务器 (Jetty) 没有响应 HTTP 请求,即使这些请求是从 Jenkins 内部发出的。它运行的非常 LXC 来宾,即指向localhost.
我已经努力解决这个问题好几天了,但没有成功。
这是尝试从以下位置联系 Jenkins Web 服务器时得到的结果localhost:
root@base:~# curl -vI http://localhost:8080/jenkins/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD /jenkins/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
Run Code Online (Sandbox Code Playgroud)
在工作设置中,您应该收到 HTTP-403,因为您尚未经过身份验证,并且回复时间不会超过一两秒,但即使几个小时后,也没有响应。Jenkins 日志文件也没有报告任何错误。
我需要帮助来找出根本原因并解决此问题,以便 Jenkins 安装按预期工作并变得可访问。
有关于寻找什么/在哪里来找出并解决这个问题的任何指示?
以下是我已经研究过的一些事情:
/etc/default/jenkins与我的其他工作设置类似,并且进行了最小的更改(例如仅绑定到本地主机和前缀)。lxc ×10
containers ×4
docker ×3
linux ×3
ubuntu ×3
networking ×2
cgroup ×1
hard-drive ×1
ipv6 ×1
jenkins ×1
lxd ×1
routing ×1
web-server ×1