标签: docker

何时以及为何应使用 apt-get update?

一般问题:

有人可以解释该命令的apt-get update作用以及我何时真正应该使用它吗?


评论

请给出详细的答复。不只是手册页的副本,除非您的版本非常详细(我在下面的手册页中放了一个定义)。

apt-get update:用于从其来源重新同步包索引文件。可用包的索引从 /etc/apt/sources.list(5) 中指定的位置获取。应该始终在升级或 dist-upgrade 之前执行更新。


子问题:

  • 包索引存储在哪里?在数据库上?在文件上?
  • 如果我apt-get install不更新缓存会发生什么?远程包是否有可能不再存在并且链接会断开?
  • 是否有一些关于 deb 存储库的商定政策?例如,存储库是否应该只包含包的最后一个版本,或者相反,它应该包含可用于特定发行版的所有版本?

语境

我问我的问题是因为我正在研究Docker 框架。它的一个功能是Dockerfile,它允许您通过从该文件执行一些指令来构建一种操作系统映像。此图像的一个属性是它应该始终相同,无论上下文是什么(构建时间等)。

恐怕如果我apt-get update在不同的时间启动命令,结果会有所不同,因此我的图像会有所不同。

apt docker

16
推荐指数
1
解决办法
8407
查看次数

无法在最小的 Centos Docker 容器上安装手册页

我有一个最小的 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)

man rpm centos docker

15
推荐指数
2
解决办法
5263
查看次数

如何限制Docker总资源?

我试图限制可从 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 …

rhel systemd docker

15
推荐指数
3
解决办法
5929
查看次数

Docker + 网桥 + DHCP

我有很多 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 并将它们分发给容器。我从那以后将启动命令更改为: …

dhcp bridge docker

14
推荐指数
1
解决办法
2万
查看次数

systemd如何在docker.service之后运行服务

我有一个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)

linux systemd docker

14
推荐指数
1
解决办法
6497
查看次数

/etc/subuid 的内容在docker上下文中是什么意思

我的/etc/subuid文件包含:

...
dockremap:165536:65536
Run Code Online (Sandbox Code Playgroud)

我不明白这dockremap行是什么意思,请解释一下。

我已经运行了一个 dockerdockerd --userns-remap=default来使用用户命名空间

docker

14
推荐指数
1
解决办法
2万
查看次数

如何允许 systemd-resolved 侦听环回以外的接口?

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 侦听的接口?

dns systemd docker systemd-resolved

14
推荐指数
3
解决办法
8172
查看次数

让 cron 在 docker 上工作

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不运行它的工作呢?我错过了什么? …

cron docker

14
推荐指数
1
解决办法
3万
查看次数

如何在无外设的 CentOS Docker 容器中启用 secret-tool 命令(由 gnome-keyring、libsecret 和 dbus 支持)?

我正在尝试使用该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)

d-bus centos gnome-keyring docker

14
推荐指数
1
解决办法
5747
查看次数

Docker postgres“psql:致命:角色“root”不存在”

我开始使用 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

我在这里做错了吗?什么可能导致这种情况?

fedora postgresql docker

13
推荐指数
1
解决办法
2万
查看次数

标签 统计

docker ×10

systemd ×3

centos ×2

apt ×1

bridge ×1

cron ×1

d-bus ×1

dhcp ×1

dns ×1

fedora ×1

gnome-keyring ×1

linux ×1

man ×1

postgresql ×1

rhel ×1

rpm ×1

systemd-resolved ×1