【问题标题】:Start docker-machine On Boot在启动时启动 docker-machine
【发布时间】:2016-08-30 11:46:13
【问题描述】:

我有一个名为defaultdocker-machine。我试图让它在启动时启动。我可以在登录时进行,但我需要它而无需登录。

我已将以下文件放入/LaunchAgents/com.docker.machine.default.plist/LaunchDaemons/com.docker.machine.default.plist 中,这两个都不起作用。

/Library/LaunchDaemons/com.docker.machine.default.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>RunAtLoad</key>
        <true/>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
        </dict>
        <key>Label</key>
        <string>com.docker.machine.default</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/docker-machine</string>
            <string>start</string>
            <string>default</string>
        </array>
    </dict>
</plist>

我还在这两个文件上运行了sudo chmod 640,以防出现here 所述的权限问题。

当我运行时,sudo launchctl load -w com.docker.machine.default.plist 如教程中所述,我得到“服务已加载”。

该服务肯定没有运行,因为我使用docker-machine lsdocker-machine status default 进行了检查,并且机器在启动时停止。

更新

我已将登录添加到我的 LaunchDaemon 并获得以下输出。

主机不存在:“默认”

然后我运行 docker-machine ls 并得到:

NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
default   -        virtualbox   Stopped                 Unknown   

如您所见,机器就在那里。如果我手动运行docker-machine start default,它可以正常启动...

Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Machine "default" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

【问题讨论】:

  • 你检查过this plist吗?您还需要通过运行eval $(docker-machine env default) bash 命令来评估当前机器 IP。
  • @KonstantinAzizov 请参阅原始问题。已添加我的 plist 文件。 IP没问题。 docker-machine 甚至没有启动
  • 为什么不用 docker 4 mac 代替 VirtualBox?当您登录时,主机将始终处于启动状态,因为 mac 本身就是主机。
  • 这就是问题所在。我需要在登录之前启动它。在登录之前无法启动应用程序。
  • 既然您将其标记为 OSX - 您是否尝试过仅使用 Docker for Mac 或者您是否特别需要使用 Toolbox?最近迁移到 Docker for Mac 和服务/终端在启动时自动设置以直接使用 Docker。不再需要明确启用/禁用。仅提供建议-感谢它没有回答您的具体问题.. :)

标签: macos docker launchd


【解决方案1】:

默认情况下,来自 /Library/LaunchDaemons 的服务以 root 用户身份运行。 root 没有任何 docker 机器。您可以将用户(在我的情况下为 jenkins)指定为

<key>UserName</key>
<string>jenkins</string>

有关更多文档,您可以使用man launchd.plist

我用于 jenkins 用户的完整 org.vovkasm.docker-machine.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
    </dict>
    <key>Label</key>
    <string>org.vovkasm.docker-machine</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/opt/docker-machine/bin/docker-machine</string>
        <string>start</string>
        <string>default</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
    <key>UserName</key>
    <string>jenkins</string>
  </dict>
</plist>

【讨论】: