【问题标题】:Running 'docker exec' in systemd service (code=exited, status=216/GROUP)在 systemd 服务中运行 'docker exec' (code=exited, status=216/GROUP)
【发布时间】:2018-01-05 05:19:14
【问题描述】:

我正在尝试使用 systemd 服务配置 docker exec,但总是失败。

  • 直接在终端 (ssh) 中执行该命令时可以正常工作。

问:可以这样运行还是我需要在 bash 脚本 (.sh) 中使用?


/etc/systemd/system/laravel.service

[Unit]
Description=Laravel Queue
After=docker.service
Requires=docker.service

[Service]
Type=simple
ExecStart="/usr/bin/docker exec -it my_docker /usr/bin/php artisan queue:work --env=production --tries 2 --timeout 60"
User=ubuntu
Group=ubuntu
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

sudo 服务 vetspay 状态

jan 05 03:04:39 legolas systemd[1]: Started Laravel Queue.
jan 05 03:04:39 legolas systemd[1]: laravel.service: Main process exited, code=exited, status=216/GROUP
jan 05 03:04:39 legolas systemd[1]: laravel.service: Unit entered failed state.
jan 05 03:04:39 legolas systemd[1]: laravel.service: Failed with result 'exit-code'.

【问题讨论】:

    标签: docker systemd


    【解决方案1】:

    错误(输入设备不是...)是由:-it在这一行ExecStart="/usr/bin/docker exec -it my_docker /usr/bin/php artisan queue:work --env=production --tries 2 --timeout 60" User=ubuntu引起的,去掉它,当docker exec在bash文件时不需要

    【讨论】:

      【解决方案2】:

      我在脚本中测试了命令,得到了错误:the input device is not a TTY

      基本上我不能将命令与-t 一起使用,因为它们是非交互式的。现在删除它就可以正常工作了!


      我在哪里找到了答案:

      the input device is not a TTY

      【讨论】:

      • 从 systemd 运行 docker 涉及的极端案例比这个答案地址更多。考虑使用systemd-docker——它提供了 SD_NOTIFY 套接字集成,弥合了 cgroup 约定中的差异,处理传播日志,并且更全面地解决了问题。
      猜你喜欢
      • 2022-08-17
      • 2021-03-19
      • 2020-12-18
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 2018-12-09
      相关资源
      最近更新 更多