【发布时间】:2021-11-28 11:44:28
【问题描述】:
问题是执行命令的结果没有正确传递到systemctl服务中,而在bash中执行这样的命令是正确的。
这是我的服务:
[Unit]
Description=Java jar which listens to Redis
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker stop java_redis
ExecStartPre=-/usr/bin/docker rm java_redis
ExecStart=/usr/bin/docker run --name java_redis --rm java_redis:latest --redis_host `docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge`
ExecStop=/usr/bin/docker stop -t 2 java_redis
[Install]
WantedBy=multi-user.target
如果我在 bash 中运行,则执行以下命令时不会出错:
/usr/bin/docker run --name java_redis --rm java_redis:latest --redis_host `docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge`
当我在 journal 中搜索时,我注意到参数没有正确传递:
Oct 08 21:04:55 mscphisprk00034 docker[1328378]: No argument is allowed: network
Oct 08 21:04:55 mscphisprk00034 docker[1328378]: org.kohsuke.args4j.CmdLineException: No argument is allowed: network
Oct 08 21:04:55 mscphisprk00034 docker[1328378]: at org.kohsuke.args4j.CmdLineParser.parseArgument(CmdLineParser.java:509)
您能告诉我如何在 systemctl 服务中获取该参数吗?
我需要传递一个参数,该参数是以下命令的结果:
docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge
【问题讨论】:
-
这似乎不是一个与编程相关的问题;像Unix & Linux 这样的网站可能是询问 systemctl 单元文件的更好地方。一般来说,Docker 内部 IP 地址并不意味着可用(并且在非 Linux 平台上无法访问),我会避免您显示的那种
docker inspect查找;你应该能够连接到localhost和docker run -p ???:6379端口号。