我目前正在开发一个小型家庭项目,其中我通过 docker 在树莓派 4 上托管各种服务。在从事这个项目时,我现在遇到了一个 dns 问题,我无法真正解决这个问题。我在容器内托管 pihole 并将其配置为使用我的路由器作为上游 DNS 服务器。在我的路由器上,我已将树莓派配置为本地 dns 服务器,并添加了其他一些上游 dns 服务器。根据我的理解,这将导致所有 dns 请求通过我的树莓派上的 pihole 容器进行路由,然后返回到我的路由器以解决它。到目前为止,此设置适用于我本地网络上的所有设备,包括树莓派本身。
我现在遇到的唯一问题是同一个树莓派上的其他容器与 pihole 位于相同和/或不同的网络中。他们似乎都在解析 dns 查询时遇到问题。例如:我有一个 phpmyadmin countainer 连接到与 pihole 容器相同的 docker 网络。如果我现在 ssh 进入 phpmyadmin 容器并想要执行“ping google.com”或“apt-get update”,由于 dns 失败,它将无法执行这些命令。
我已经检查过的内容:
到目前为止,上述步骤都没有解决问题。
出于好奇,我在主机上的 /etc/dhcpcd.conf 中将路由器的 IP 设置为静态名称服务器,并重新加载了 dhcpcd 和 docker 守护进程。如果我现在 ssh 进入我的 phpmyadmin …
docker-compose logs -f
是一个有用的命令,可以在后台查看容器的日志,并按照它们立即查看新条目。似乎使用最新的稳定版本 V2.1.0 无法再退出这些前台进程control-c:
$ docker-compose logs -f
...
webserver-1 | [Sat Nov 13 12:10:33.814463 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
^C^C^C
Run Code Online (Sandbox Code Playgroud)
它只打印^C
而不终止进程。即使多次按下它(通常会立即终止进程),也不会发生任何事情。唯一有效的是control-\,它会打印一个巨大的堆栈跟踪:
^C^C^C^\SIGQUIT: quit
PC=0x7b950 m=0 sigcode=128
goroutine 0 [idle]:
runtime.futex(0x1491b10, 0x80, 0x0, 0x0, 0x0, 0x0, 0x56a08, 0x18473b0, 0x1a9d8, 0x4c394, ...)
runtime/sys_linux_arm.s:443 +0x1c
runtime.futexsleep(0x1491b10, 0x0, 0xffffffff, 0xffffffff)
runtime/os_linux.go:44 +0x184
runtime.notesleep(0x1491b10)
runtime/lock_futex.go:159 +0xac
runtime.mPark()
runtime/proc.go:1340 +0x20
runtime.stopm()
runtime/proc.go:2301 +0x78
runtime.findrunnable(0x1846000, 0x0)
runtime/proc.go:2960 +0x84c
runtime.schedule()
runtime/proc.go:3169 +0x2bc
runtime.park_m(0x18821c0)
runtime/proc.go:3318 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试docker-compose
使用 Podman,据此现在支持它。我运行说明,并且在以 root 身份运行时确实可以命中套接字,但是当我以用户身份尝试时,我得到:
尝试连接到位于 unix:///var/run/docker.sock 的 Docker 守护程序套接字时权限被拒绝:获取“http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all= 1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dproject%22%3Atrue%7D%7D":拨打unix /var/run/docker.sock:连接:权限被拒绝
是否可以与用户权限podman
一起使用?docker-compose
或者你必须是 root 吗?
添加了 docker 组,然后将我的用户添加到其中,然后重新启动以绝对确定更改会生效:
[grant@rockylinux docker-compose-files]$ ./compose.sh setup --project
Pass: Docker compose version is 2.15.1.
Running docker-compose --project-directory /home/grant/project -f /home/grant/project/docker-compose-files/docker-compose.yml --profile project up -d
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dproject%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
[grant@rockylinux docker-compose-files]$ cat /etc/group
...SNIP...
grant:x:1000:
docker:x:1001:grant
Run Code Online (Sandbox Code Playgroud)
在上述博客文章中测试了curl命令。它以 root 身份工作,但不能以用户身份工作
[grant@rockylinux …
Run Code Online (Sandbox Code Playgroud)