请问有没有其他可行的方案或者其他软件? 尝试了使用仅限共享用户执行 orb ,未遂:(
docker desktop 太重了。
]]>[Unit] Description=mqtt broker server After=network-online.target Wants=network-online.target Before=shutdown.target [Container] HostName=mqtt-broker AutoUpdate=registry Image=docker.io/eclipse-mosquitto:latest Network=macvlan.network PodmanArgs=--mac-address XX:XX:XX:XX:XX:XX Volume=/srv/docker/root/volumes/mqtt/data:/mosquitto/data Volume=/srv/docker/root/volumes/mqtt/config:/mosquitto/config Volume=/srv/docker/root/volumes/mqtt/log:/mosquitto/log [Service] Restart=always [Install] WantedBy=multi-user.target
然后容器就以一个 systemd 的服务的形式运行起来了。
]]>openlist
这类无依赖的单文件程序,用docker
部署是为了什么?不应该遵循 FHS 规范,安装到/opt/openlist
并使用systemd
管理吗?
但是我在实际接触中发现,为了MySQL/Nginx
性能,实际上docker
部署的没几个,反而openlist
这种web
应用大多是docker
部署。
我有 3 个服务,分别是通过 3 个 compose.yml 管理的。 一个服务是 caddy ,作为反向代理,同时反代另外两个服务(叫它们 A 和 B 好了)。 caddy 容器通过 external network 和 A 、B 相连,并且通过容器名访问 A 和 B 。
但是服务 A 和 B 都需要访问一些被污染了的网站(比如 raw.githubusercontent.com),虽然试过设置 HTTP_PROXY/HTTPS_PROXY 等环境变量让它们走代理,但是依然有部分流量直连,因此打算再跑一个 VPN 容器来接管这两个服务的流量。
假设我跑起来了一个 VPN 容器,该怎么接管 A 和 B 的流量呢?
]]>后端服务 A
部署在一个 docker 中,可执行文件 as
及其依赖部署在另一个 docker 中。
服务 A
需要调用as
,且调用时需要传给as
一个位于宿主机上的文件路径。
在保证以下两点的前提下,实现这个有什么好的方案吗?望指点
docker 到底是怎么实现在 127.0.0.11:53 监听 DNS 请求但是进程并不出现在容器里?
]]>docker-compose up Pulling db (mysql:8.0)... ERROR: Get "https://registry-1.docker.io/v2/": context deadline exceeded
尝试过的方法:
麻了,有没大佬知道应该怎么解决这个问题呀。
]]>我的系统是 linux 使用代理下载的 docker 和 openwebui
但是我的 docker 完全没有设置任何代理 里面的容器(localhost)居然走的 v2rayN
怎么才能让 docker 里面的容器不走 v2rayN 呢? 我记得默认的 v2rayN 设置都是跳过 geoip:private.
]]>现在有个物理机,IP 地址为 192.168.1.111
在物理机上面装了一个 docker ,并且创建了一个 container ,其 IP 地址为 192.168.49.2
现在想在物理机和 docker container 里面均可以成功执行下述命令。目前只有物理机中可以正确执行。
curl -X GET https://registry-1.docker.io/v2/ -v
物理机执行命令结果
#> curl -X GET https://registry-1.docker.io/v2/ -v Note: Unnecessary use of -X or --request, GET is already inferred. * Uses proxy env variable no_proxy == 'localhost,127.0.0.0/8,::1' * Uses proxy env variable https_proxy == 'http://127.0.0.1:7890/' * Trying 127.0.0.1:7890... * Connected to 127.0.0.1 (127.0.0.1) port 7890 * CONNECT tunnel: HTTP/1.1 negotiated * allocate connect buffer * Establish HTTP proxy tunnel to registry-1.docker.io:443 > CONNECT registry-1.docker.io:443 HTTP/1.1 > Host: registry-1.docker.io:443 > User-Agent: curl/8.5.0 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < * CONNECT phase completed * CONNECT tunnel established, response 200 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS * ALPN: server did not agree on a protocol. Uses default. * Server certificate: * subject: CN=*.docker.com * start date: Mar 5 00:00:00 2025 GMT * expire date: Apr 3 23:59:59 2026 GMT * subjectAltName: host "registry-1.docker.io" matched cert's "*.docker.io" * issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M03 * SSL certificate verify ok. * Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption * Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption * Certificate level 2: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption * using HTTP/1.x > GET /v2/ HTTP/1.1 > Host: registry-1.docker.io > User-Agent: curl/8.5.0 > Accept: */* > < HTTP/1.1 401 Unauthorized < content-type: application/json < docker-distribution-api-version: registry/2.0 < www-authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io" < date: Sat, 05 Jul 2025 10:23:42 GMT < content-length: 87 < strict-transport-security: max-age=31536000 < {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]} * Connection #0 to host 127.0.0.1 left intact
docker container 中执行命令结果
#> curl -X GET https://registry-1.docker.io/v2/ -v Note: Unnecessary use of -X or --request, GET is already inferred. * Trying 154.85.102.30:443... * Trying 2600:1f18:2148:bc00:5cac:48a0:7f88:7266:443... * Immediate connect fail for 2600:1f18:2148:bc00:5cac:48a0:7f88:7266: Network is unreachable * Trying 2600:1f18:2148:bc01:f43d:e203:cafd:8307:443... * Immediate connect fail for 2600:1f18:2148:bc01:f43d:e203:cafd:8307: Network is unreachable * Trying 2600:1f18:2148:bc02:22:27bd:19a8:870c:443... * Immediate connect fail for 2600:1f18:2148:bc02:22:27bd:19a8:870c: Network is unreachable * connect to 154.85.102.30 port 443 failed: Connection timed out * Failed to connect to registry-1.docker.io port 443 after 133144 ms: Connection timed out * Closing connection 0 curl: (28) Failed to connect to registry-1.docker.io port 443 after 133144 ms: Connection timed out
物理机查询到的路由表
#> ip route default via 192.168.1.1 dev wlo1 proto dhcp src 192.168.1.111 metric 600 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 192.168.1.0/24 dev wlo1 proto kernel scope link src 192.168.1.111 metric 600 192.168.49.0/24 dev br-9123093efaea proto kernel scope link src 192.168.49.1
]]>昨天拉 AnythingLLM 也是这样。
都 ping 不通,下架了? 没看到资料啊。
很久没用 docker 了,我知道政府把 dockerhub 屏蔽了。
但是国内这些镜像源,怎么一个都拉不来了国外镜像?
我现在只能本地翻墙,拉取镜像,下载,上传到服务器。
太麻烦了,有直接拉的方式吗?
]]>所以前来问问各位,docker 是否确实有这个问题?以及如果有的情况下,如何在高版本 docker 下打包一个低版本 docker 兼容的镜像?
网上查找该问题描述甚少,只有 chatgpt 提到了一嘴 docker 新版本使用了 BuildKit 特性,所以可能存在版本兼容问题,进一步查找没有得到更多。
外部服务器容器环境复杂,不太方便再重装一个低版本 docker ,希望能有不重装环境的解决方案。
]]>需要注意的是如果说你的 docker 还对外提供服务 需要打开 auto_route 以及 auto_redirect 这样 tun 模式就不会与 docker 网桥冲突 不然可能会出现打开 sing-box 时 docker 对外提供的服务访问不了
详细请看: https://github.com/wynemo/tech-notes/blob/master/science/sing-box/sing-box-for-docker-pull.md
]]>run 的时候固定一个版本是不是好习惯?
]]>Run 'docker run --help' for more information
]]>windows 11 家庭版
装有一个 ubuntu 子系统( WSL2 )
装有 docker desktop (开启了 WSL2 集成功能,以便在 ubuntu 中执行 docker 相关命令)
[问题背景]
我想在 ubuntu 中,使用 nsenter 命令进入容器的 namespace ,但需要先找出这个容器的 Pid 是多少
于是在 ubuntu 中执行以下命令: docker inspect --format '{{.State.Pid}}' <容器 ID>
查询得到容器的 Pid 是 6366
但奇怪的是这个 Pid 在 ubuntu 中并不存在,为什么会这样呢,返回的这个 Pid 是哪个系统的 Pid ?
]]>使用 user 指定用户, 要求宿主机提前创建相同的 uid/gid, 才能被映射到容器内. 而使用 PUID/PGID 则是容器创建时动态创建用户, 容器初始按 root 权限运行, 随后才切换到非 root 用户.
https://docs.linuxserver.io/misc/non-root/#why
现在有这么个需求, 一台 linux 服务器支持 dev container 形式开发环境, 需要让每个用户打开开发容器时在容器内部使用宿主机 uid/gid 的用户, 而不是开发容器默认的 vscode 用户(uid/gid 1000), 有什么比较好的办法?
当前能想到的方法是改造开发容器镜像, 做成类似 linuxserver 那样的镜像, 通过 PUID 和 PGID 传递用户.
注: 需求来源是开发容器不会拥有独立 ip, 又要开放 samba 服务, 准备将各用户的家目录通过宿主机的 samba 统一映射出去, 因此需要容器内使用的用户跟宿主机的用户保持一致, 不然会有权限问题.
]]>-v /run/media/$USER/:/run/media/$USER
参数可以挂载 u 盘,但是 u 盘一旦重新插入像需要重启容器才能访问,有点麻烦😵💫; v 友有没有优雅点的方法啊😖 ]]>网络环境:内网环境,分配了固定 IP ,可访问外网。 IP: 20.32.81.66 网关:20.32.81.254
DNS:20.32.81.254
部署环境:window 10 PC ,使用 docker 最新版部署。
外网 | 主交换机 |
+-------------+-------------+ | | | 其它服务 其它服务 交换机 | | | | | +-----+-----+ | | | | | | 另外服务 PC
发现网络波动和容器相关,偶尔某个容器的网络延迟特别大,我部署了一个 Python 的基础 get 接口,正常请求是 2-5ms ,但是某天就会 3000ms 的延迟出现。
wsl2 配置:
[wsl2] memory=24GB processors=8 swap=8GB localhostForwarding=true # 网络优化参数 kernelCommandLine=net.ipv4.tcp_keepalive_time=20 net.ipv4.tcp_keepalive_intvl=10 net.ipv4.tcp_keepalive_probes=5 net.core.somaxcOnn=65535 net.ipv4.tcp_max_syn_backlog=16384 net.ipv4.tcp_fin_timeout=15 net.ipv4.tcp_tw_reuse=1 net.core.netdev_max_backlog=16384 net.ipv4.ip_local_port_range=1024 65535 net.ipv4.tcp_rmem=4096 12582912 16777216 net.ipv4.tcp_wmem=4096 12582912 16777216 net.ipv4.tcp_mtu_probing=1 guiApplicatiOns=true # 移除嵌套虚拟化设置 swapFile=D:\\wsl-swap.vhdx # 移除不支持的选项 networkingMode=NAT
docker 配置:
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "dns": [ "20.32.81.254" ], "experimental": false, "log-driver": "json-file", "mtu": 1500, "registry-mirrors": [ "https://dockerpull.cn" ] }
]]>不想再一个一个重新配置域名反代解析,直接将群晖的 NPM docker 目录( docker-compose.yml 文件 和 data, letsencrypt 两个文件夹)拷贝到 OpenWrt 上去构建,发现无法启动成功。报错如下:
能力有限,网上搜索一些关键字没有大看明白,网上简单搜索了一下大概了解可能是跟 ssl 证书相关但不知道解决办法。
不知有没有佬哥知道如何解决这个问题呢?核心点就是想保留之前 NPM 配置好的域名解析。
附带 docker-compose.yml 内容如下:
services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '19654:80' # Public HTTP Port - '1789:443' # Public HTTPS Port - '2345:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section environment: TZ: Asia/Shanghai # Uncomment this if you want to change the location of # the SQLite DB file within the container DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
]]>1 、在宿主机连接 pgsql(使用物理网卡) 时间 0.034s
2 、在宿主机连接 pgsql(使用 docker0) 时间 10s
3 、容器内连接 pgsql(使用 docker0) 时间 10s
4 、容器内连接 pgsql(使用物理网卡) 时间 10s
宿主机网卡如下
宿主机路由信息
Starting April 1, 2025, all users with a Pro, Team, or Business subscription will have unlimited Docker Hub pulls with fair use. Unauthenticated users and users with a free Personal account have the following pull limits:
Unauthenticated users: 10 pulls/hour Authenticated users with a free account: 100 pulls/hour
代理 IP 地址岂不是很容易达到限制?
看了一下 AtomHub ,发现早已下线...
]]>