有人可以解释该命令的apt-get update作用以及我何时真正应该使用它吗?
请给出详细的答复。不只是手册页的副本,除非您的版本非常详细(我在下面的手册页中放了一个定义)。
apt-get update:用于从其来源重新同步包索引文件。可用包的索引从 /etc/apt/sources.list(5) 中指定的位置获取。应该始终在升级或 dist-upgrade 之前执行更新。
apt-get install不更新缓存会发生什么?远程包是否有可能不再存在并且链接会断开?我问我的问题是因为我正在研究Docker 框架。它的一个功能是Dockerfile,它允许您通过从该文件执行一些指令来构建一种操作系统映像。此图像的一个属性是它应该始终相同,无论上下文是什么(构建时间等)。
恐怕如果我apt-get update在不同的时间启动命令,结果会有所不同,因此我的图像会有所不同。
我有一个最小的 Centos 7 Docker 映像,我正在尝试获取一些关于它的手册页以帮助调试我的 Dockerfile。开箱即用,它没有太多:
# man ls
No manual entry for ls
Run Code Online (Sandbox Code Playgroud)
根据这个 Serverfault answer,我安装了man-pagesRPM,这似乎很好:
# yum install -y man-pages
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.vtti.vt.edu
* extras: centos.mbni.med.umich.edu
* updates: centos.netnitco.net
Resolving Dependencies
--> Running transaction check
---> Package man-pages.noarch 0:3.53-5.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================
Package Arch Version Repository Size
======================================================================================================
Installing:
man-pages noarch 3.53-5.el7 base 5.0 M
Transaction Summary …Run Code Online (Sandbox Code Playgroud) 我试图限制可从 docker 访问的总资源(例如只有 90% 的 RAM 和 1500% 的 CPU)。我在启动容器时无法使用 CPU 和 RAM 限制,这就是为什么我需要限制可用于 docker 容器的总资源。
我有大约 20 个容器,它们可以消耗最大 CPU 和内存但不能同时消耗,所以我无法设置 CPU 和 RAM 限制,这就是为什么我需要限制 docker 使用的总资源
首先,我创建了一个切片:我尝试了上面的指令,但无法同时限制 RAM 和 CPU 使用率
# /etc/systemd/system/docker_limit.slice
[Unit]
Description=Slice that limits docker resources
Before=slices.target
[Slice]
CPUAccounting=true
CPUQuota=700%
#Memory Management
MemoryAccounting=true
MemoryHigh=20G
MemoryMax=25G
MemoryMaxSwap=10G
Run Code Online (Sandbox Code Playgroud)
还有我的 daemon.json
{
"insecure-registries" : [ "url1", "url2"],
"cgroup-parent": "docker_limit.slice"
}
Run Code Online (Sandbox Code Playgroud)
但是当我从容器中尝试时:
stress --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
Run Code Online (Sandbox Code Playgroud)
我可以从 docker stats 中看到它使用的是 111Go …
我有很多 docker 容器,我需要在与它们的主机相同的 LAN 上进行寻址。到目前为止,我一直通过使用设置桥接器并手动为其分配 IP以及自己管理 IP来实现这一点。一个示例启动将是这样的:
docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
Run Code Online (Sandbox Code Playgroud)
主机在/etc/network/interfaces(ubuntu) 中定义了网桥,如下所示:
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Run Code Online (Sandbox Code Playgroud)
自从我发现了serf,我一直在尝试在容器内使用自动发现,以便 DHCP 可以跟踪 IP 并将它们分发给容器。我从那以后将启动命令更改为: …
我有一个service文件,它执行一个shell脚本,需要在docker启动后执行该脚本。这是我尝试过的,但脚本是在不等待 docker.service 的情况下启动的:
[Unit]
Description=network configuration service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/etc/systemd/system/
Type=oneshot
ExecStart=/bin/bash netset.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud) 我的/etc/subuid文件包含:
...
dockremap:165536:65536
Run Code Online (Sandbox Code Playgroud)
我不明白这dockremap行是什么意思,请解释一下。
我已经运行了一个 dockerdockerd --userns-remap=default来使用用户命名空间。
systemd-resolved 是一个守护进程,除其他外,它通过侦听本地环回接口上的 IP 地址 127.0.0.53 充当 DNS 服务器。
我想让守护进程监听另一个接口。我的用例是将它公开给 docker 容器,以便 docker 容器共享由 systemd-resolved 提供的 DNS 缓存。我知道如何将主机配置为 docker 容器的 DNS 服务器,但至少在默认情况下,systemd-resolved 拒绝这些 DNS 查询,因为它们不是来自环回接口,而是来自 docker 桥接接口。
使用 dnsmasq(类似于 systemd-resolved 的工具),我通过添加listen-address=172.17.0.1到配置文件. 不幸的是,我找不到 systemd 解析的等效项。
由于 systemd-resolved 至少在 Ubuntu 18.04 上是默认设置,因此我想要一个适用于此配置的解决方案。
有没有办法配置 systemd-resolved 侦听的接口?
我nginx在 docker 中使用。我已配置cron作业以更新 SSL 证书和 DNS 注册。但是,cron作业没有运行。
我做了什么。我创建了一个Dockerfile基于arm32v7/nginx这个实习生的基于debian:stretch-slim. 一开始我安装了cron,并假设它会运行,但后来发现该服务没有启动(没有安装init子系统,debian:stretch-slim非常少)。所以我添加了代码来启动cron。现在,如果我问容器是否cron正在运行,它会说是。
#ctrl-alt-delor@raspberrypi:~/a_website/docker$
#? docker exec -it $(docker container ls | sed -nr -e 's/.*(website-stack.*)/\1/p') service cron status
[ ok ] cron is running.
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到我添加到的任务的任何日志cron。
如果我运行run-parts --report /etc/cron.daily,我的任务就会运行,并产生日志输出。因此它仍然看起来好像cron没有运行。
#ctrl-alt-delor@raspberrypi:~/a_website/docker$
#? docker exec -it $(docker container ls | sed -nr -e 's/.*(website-stack.*)/\1/p') cat /proc/12/cmdline; echo
/usr/sbin/cron
Run Code Online (Sandbox Code Playgroud)
那么为什么cron不运行它的工作呢?我错过了什么? …
我正在尝试使用该secret-tool命令在正在运行的无头 CentoS 7.5.1804 Docker 容器中安全地存储秘密,但似乎无法找到使这项工作成功所需的包和/或配置。
具体来说,我希望能够运行此命令:
printf "aPassword" | secret-tool store --label="test" foo bar
Run Code Online (Sandbox Code Playgroud)
并且能够通过运行来查看该密码:
secret-tool lookup foo bar
Run Code Online (Sandbox Code Playgroud)
当我运行secret-tool store命令时,我得到这个:
printf 'aPassword' | secret-tool store --label="test" foo bar
** Message: Remote error from secret service: org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
secret-tool: No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
Run Code Online (Sandbox Code Playgroud)
我关注了ArchLinux Gnome/Keyring wiki 页面,并尝试通过以下步骤在 CentOS Docker 容器上执行相同操作:
docker run --privileged -it centos:centos7.5.1804 /bin/bash
# remainder of commands are …Run Code Online (Sandbox Code Playgroud) 我开始使用 postgres docker 容器
sudo docker run --name some-postgres -d postgres
然后尝试使用连接到它
sudo docker run -it --rm --link some-postgres:postgres postgres psql -h postgres
这给出了错误 psql: FATAL: role "root" does not exist
这些命令与docker hub 页面上列出的命令完全相同仅以 root 身份运行,不以-e POSTGRES_PASSWORD=mysecretpassword
我在这里做错了吗?什么可能导致这种情况?