标签: docker

如何将 Docker 容器正确处理为 systemd 服务?

我通过 systemd 单元处理由 docker 容器实现的许多服务(数据库、Web 服务器...)。它可以工作,但是系统需要很长时间才能关闭,显然是在等待 docker 服务关闭。

这是我在 Debian Stretch 下使用 Docker CE 在虚拟机中制作的 systemd 单元的示例:

/lib/systemd/system/mariadb.service

[Unit]
Description=MariaDB
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStart=/usr/bin/docker run --rm \
    --name=mariadb \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=test \
    -e MYSQL_USER=user \
    -e MYSQL_PASSWORD=user \
    -v /var/lib/mysql:/var/lib/mysql \
    mariadb:latest
ExecStop=-/usr/bin/docker stop mariadb # See UPDATEs 1 & 2

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

当我使用 systemctl 命令时,服务会在几秒钟内正确启动和停止。但是当我关闭系统时,它显示:

虚拟机截图 1 虚拟机截图 2 虚拟机截图 3

持续时间超过3分钟。如果有许多容器通过 systemd 运行,则可能会更长。

该问题并非特定于 MariaDB。

有没有更好的方法来通过 systemd 处理 docker 容器,避免额外的关机时间?

  • 更新 1:正如 Bennett Hardwick 在评论中建议的那样,我尝试从服务的定义中删除 ExecStop …

debian systemd docker debian-stretch

4
推荐指数
1
解决办法
4124
查看次数

在 docker 中运行 jdk 8 在 arch linux 上突然中断,“无法分配文件描述符表 - 内存不足”

昨天升级我的系统后,我试图重新启动我的 docker 容器。我正在运行一个sbt(scala 构建工具)容器。不幸的是,它停止工作,出现以下错误

library initialization failed - unable to allocate file descriptor table - out of memory/usr/share/sbt/bin/sbt-launch-lib.bash: line 46:    76 Aborted                 (core dumped) "$@"
Run Code Online (Sandbox Code Playgroud)

然后我发现我 dockerized 的任何 Java 应用程序都停止工作了。所以我尝试运行一个简单的 tomcat。结果如下(在底部剪下,因为它有数百行[Too many errors, abort]

docker run -it --rm tomcat:8.0                                                                                                                                             
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /docker-java-home/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
library initialization failed - unable to allocate file descriptor table - out of memory#
# A fatal error has been detected by the …
Run Code Online (Sandbox Code Playgroud)

linux java arch-linux docker

4
推荐指数
1
解决办法
2900
查看次数

Docker 容器没有停止

问题是什么 ?

root@hero:/home/intra# docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS                                            NAMES
b7f12c671a23        owasp/zap2docker-stable   "zap-webswing.sh"   25 minutes ago      Up 25 minutes (unhealthy)   0.0.0.0:8080->8080/tcp, 0.0.0.0:8090->8090/tcp   quizzical_bartik

root@hero:/home/intra# docker stop b7f12c671a23
Error response from daemon: cannot stop container: b7f12c671a23: Cannot kill container b7f12c671a23517a2c76c02e28a08af34fbe68a6709a09f5a303182656cb7c4d: unknown error after kill: runc did not terminate sucessfully: container_linux.go:388: signaling init process caused "permission denied"
: unknown
root@hero:/home/intra# 
Run Code Online (Sandbox Code Playgroud)

permissions docker

4
推荐指数
1
解决办法
7660
查看次数

Docker 容器无法在 Fedora 32 中连接到互联网?

问题

我最近创建了一个必须拉出公共 github 存储库的 docker 容器,但是,它无法解析主机 github.com。事实上,它甚至无法执行 ping 命令。

注意:这里的所有网络操作都在构建后的容器内,当容器运行时

ping www.google.comcannot resolve host

它根本无法连接到互联网。

在查看互联网和Docker 文档后

尝试的解决方案

1) 启用Docker 文档中给出的 IP 转发

我尝试启用 IPForwarding 但无济于事。

/usr/lib/systemd/network/80-container-host0.network启用IPForwarding后的内容

...
[Network]
DHCP=yes
LinkLocalAddressing=yes
LLDP=yes
EmitLLDP=customer-bridge
IPForward=true // this line was changed
[DHCP]
UseTimezone=yes
Run Code Online (Sandbox Code Playgroud)

2) 重新创建Stack Overflow 中给出的 Docker Bridge

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
sudo service restart docker
Run Code Online (Sandbox Code Playgroud)

这个本来对这个问题有效

ubuntu 有一个解决方案,但是我的网络配置没有那个有问题的线路

sudo …

networking linux wireless-networking docker docker-compose

4
推荐指数
1
解决办法
2933
查看次数

带有 Ubuntu 20.10 的 Docker:`strconv.Atoi:解析“0-beta1”:无效语法`

我只是使用通常的方法更新安装在我机器上的所有软件包:

sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
Run Code Online (Sandbox Code Playgroud)

重新启动系统后,我看到我的 Docker 容器从执行中消失了,然后我决定启动通常的hello-world容器。我检索到以下错误消息。

sudouser@machine:~$ sudo docker run hello-world
docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: strconv.Atoi: parsing "0-beta1": invalid syntax.
ERRO[0004] error waiting for container: context canceled 
Run Code Online (Sandbox Code Playgroud)

尝试过的解决方案

  • 卸载并重新安装 Docker:无变化

有用的信息

Distributor ID: Ubuntu
Description:    Ubuntu Groovy Gorilla (development branch)
Release:    20.10
Codename:   groovy
Kernel:     GNU/Linux 5.8.0-19-generic x86_64
Run Code Online (Sandbox Code Playgroud)

linux ubuntu docker

4
推荐指数
1
解决办法
1104
查看次数

docker-compose 出现“卷‘类型’是必需属性”错误

我刚刚开始学习 docker 的工作原理,在使用 docker-compose 时遇到 yaml 文件的问题。

version: '3.7'
services:
  portainer:
    container_name: portainer
    image: portainer/portainer
    volumes:
      - portainer_data:/data
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    ports:
      - "9000:9000"

  hass:
    container_name: hass
    image: homeassistant/home-assistant
    volumes:
      - /home/flory/home_assistant:/config
      - /etc/letsencrypt:/certs
    restart: always
    network_mode: host

  mqtt:
    container_name: mqtt
        container_name: mqtt
    image: eclipse-mosquitto
    restart: always
    volumes:
      - /home/flory/mosquitto/config: /mosquitto/config
      - /home/flory/mosquitto/data: /mosquitto/data
      - /home/flory/mosquitto/log: /mosquitto/log
    ports:
      - 1883:1883
      - 9000:9000

volumes:
   portainer_data:
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

services.mqtt.volumes 'type' 是必需的属性。

有人可以帮我纠正这个问题吗?

docker yaml mqtt docker-compose

4
推荐指数
1
解决办法
4792
查看次数

更新 docker 后出现 Docker 守护进程错误

我在我的 Fedora 系统上更新了 docker。在此之后,当我运行 docker 命令时,我收到错误“无法联系 docker 守护进程”。

运行systemctl status docker显示 docker 守护进程未能启动。检查 journaldjournald -xe显示以下错误:

ERROR: ZONE_CONFLICT: 'docker0' already bound to a zone
Run Code Online (Sandbox Code Playgroud)

docker

4
推荐指数
1
解决办法
1115
查看次数

如何使用 docker.io 解决“找不到内存的 cgroup 挂载点”

cgroup mountpoint not found for memory使用 docker.io 时如何解决?

我安装了 ubuntu-14.04,内核版本 3.13.0-20-generic。Docker 版本是 0.8.1。

docker

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

Windows 上的 boot2docker - 无法共享文件夹

我在 Windows 7 上运行boot2docker v1.2.0 并遵循了文件夹共享的说明。

我在 docker 控制台中收到消息,表明 samba 服务器正在启动,当我启动时,docker logs samba-server我得到一些看起来正在工作的输出:

docker@boot2docker:~$ docker logs samba-server
Setting up samba cfg --start my-data1 /data
add /data
Starting Samba daemons: nmbd smbd.
watching /var/log/samba/*
==> /var/log/samba/cores <==

==> /var/log/samba/log.nmbd <==
[2014/08/30 20:24:28,  0] nmbd/nmbd.c:861(main)
  nmbd version 3.6.6 started.
  Copyright Andrew Tridgell and the Samba Team 1992-2011

==> /var/log/samba/log.smbd <==
[2014/08/30 20:24:28,  0] smbd/server.c:1053(main)
  smbd version 3.6.6 started.
  Copyright Andrew Tridgell and the Samba Team 1992-2011
tail: …
Run Code Online (Sandbox Code Playgroud)

windows samba docker

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

我可以在 Ubuntu 12.04 (Precise) 上运行 Docker 吗?

我希望为一个项目实现Docker的 PoC ,但只有运行 Ubuntu 12.04(精确)的机器可用。我不确定内核版本是否足够最新以运行 Docker。

您预计我会在尝试使用这些机器时遇到什么问题?

ubuntu docker

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