标签: docker-compose

Docker 容器 DNS 无法与 pihole 配合使用

我目前正在开发一个小型家庭项目,其中我通过 docker 在树莓派 4 上托管各种服务。在从事这个项目时,我现在遇到了一个 dns 问题,我无法真正解决这个问题。我在容器内托管 pihole 并将其配置为使用我的路由器作为上游 DNS 服务器。在我的路由器上,我已将树莓派配置为本地 dns 服务器,并添加了其他一些上游 dns 服务器。根据我的理解,这将导致所有 dns 请求通过我的树莓派上的 pihole 容器进行路由,然后返回到我的路由器以解决它。到目前为止,此设置适用于我本地网络上的所有设备,包括树莓派本身。

我现在遇到的唯一问题是同一个树莓派上的其他容器与 pihole 位于相同和/或不同的网络中。他们似乎都在解析 dns 查询时遇到问题。例如:我有一个 phpmyadmin countainer 连接到与 pihole 容器相同的 docker 网络。如果我现在 ssh 进入 phpmyadmin 容器并想要执行“ping google.com”或“apt-get update”,由于 dns 失败,它将无法执行这些命令。

我已经检查过的内容:

  • 我查看了 phpmyadmin 容器的 /etc/resolv.conf =>它包括 127.0.0.11 - 据我所知,这是正确的
  • 我查看了主机的 /etc/resolv.conf =>它包括我的树莓派的实际 IP(不是 127.0.0.1)。我不明白为什么它在这里使用实际的 ip 而不是 localhost,但无论如何它确实有效
  • 我重新启动了 docker 守护进程
  • 我重新创建了 docker-compose.yml 中包含的网络
  • 我重新创建了 phpmyadmin 容器

到目前为止,上述步骤都没有解决问题。

出于好奇,我在主机上的 /etc/dhcpcd.conf 中将路由器的 IP 设置为静态名称服务器,并重新加载了 dhcpcd 和 docker 守护进程。如果我现在 ssh 进入我的 phpmyadmin …

dns raspberry-pi docker pi-hole docker-compose

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

无法再使用 CTRL + C 停止 docker-compose logs -f

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)

shell terminal signals docker docker-compose

5
推荐指数
1
解决办法
928
查看次数

Podman w/Docker Compose - 以用户身份运行?

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

编辑2

在上述博客文章中测试了curl命令。它以 root 身份工作,但不能以用户身份工作

[grant@rockylinux …
Run Code Online (Sandbox Code Playgroud)

non-root-user podman docker-compose

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