我有一个单元,运行docker映像的“最新”标签。第一次启动时,通过“ docker pull”命令从单元文件中获取最新映像。
但是在任何后续的(重新)启动中,似乎都不会执行“ docker pull”命令,因为任何带有“ latest”标记的新映像修订都不会被提取。
在命令行上运行“ docker pull ...”可以按预期工作。
我的服务档案:
[Unit]
Description=Foo
Requires=docker.service
After=docker.service
[Service]
TimeoutStartSec=0
KillMode=none
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker kill foo
ExecStartPre=-/usr/bin/docker rm foo
ExecStartPre=/usr/bin/docker login -e [email protected] -u bla -p xxxxx https://myregistry.example.com && /usr/bin/docker pull myregistry.example.com/foo
ExecStart=/usr/bin/docker run --name foo myregistry.example.com/foo
ExecStop=/usr/bin/docker stop foo
[X-Fleet]
Global=true
这是故意行为吗?是否可以解决此问题?
提前致谢!
编辑:运行CoreOS 557.2.0,泊坞窗1.4.1和短暂的0.9.0
我不确定您是否可以&&
在ExecStartPre
部分中使用外壳样式。
因此,一种简单的方法就是将其分解
ExecStartPre=/usr/bin/docker login -e [email protected] -u bla -p xxxxx https://myregistry.example.com
ExecStartPre=/usr/bin/docker pull myregistry.example.com/foo
如果您不想在单位文件中嵌入凭证,则可以让CoreOS cloud-config用这样的部分写入凭证
write_files:
- path: /home/core/.dockercfg
owner: core:core
permissions: 0644
content: |
{"https://myregistry.example.com:5000":{"auth":"Y2FudGJlbGlldmU6eW91ZGVjb2RlZHRoaXM=","email":"[email protected]"}}
auth值是base64 username:password组合,您可以创建或仅获取有效的.dockercfg文件。
因此,现在您的CoreOS计算机将使用所需的凭据启动,您还需要做另一件事-确保需要登录到注册表的单元以核心用户身份运行:
[Service]
User=core
ExecStartPre=/usr/bin/docker pull myregistry.example.com/foo
如果您想做类似Shell的事情,您总是可以启动Shell并让它执行所需的操作
ExecStartPre=/bin/sh -c '/usr/bin/docker login -e [email protected] -u bla -p xxxxx https://myregistry.example.com && /usr/bin/docker pull myregistry.example.com/foo'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句