help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Debugging Shepherd Daemon. Possible escape char issue.


From: Jesse Millwood
Subject: Re: Debugging Shepherd Daemon. Possible escape char issue.
Date: Tue, 10 Dec 2024 08:17:38 -0500
User-agent: Mozilla Thunderbird

Actually I'm not sure what my issue was before but I have this working as the extra arguments:

   (extra-arguments
    '("--label"
      "traefik.http.routers.whoami.rule=Host(`whoami.geekslab`)"))

Didn't have to wrap the whole thing in escaped quotes and used backticks for the go lang string literal in the rule.


On 12/10/24 07:11, Jesse Millwood wrote:
For what it's worth I figured this out with help from giacomo of the gocix project. He has a really neat herd action where you can query the command line invocation that was used. That helped quite a bit to figure out what the issue was. Turns out for passing labels to the docker invocation you have to wrap the argument in escaped quotes so that the whole thing is passed to the --label argument as a string:

                     (oci-extra-arguments
                      '("--label" "\"traefik.http.routers.whoami.rule=Host(`whoami.geekslab`)\""))

The backticks used here are because that is a string literal that is evaluated by docker, which is written in the Go programming language.

Jesse


On 11/29/24 14:08, Jesse Millwood wrote:
Hello,

I am trying to run some docker services as an oci-service-configuration entry.

I have one simple one running fine. However the one that I am having trouble with, I assume is an issue with quoting and escaping. I don't see any issue in /var/log/messages. I'd like to be able to see the actual command that Shepherd is trying to run. Is there a way to do that?

The Shepherd service I am trying to run is this:


(service oci-container-service-type
  (list
   (oci-container-configuration
    (image "traefik/whoami")
    (network "traefik-network")
    (extra-arguments
     '("--label"
"traefik.http.routers.whoami.rule=Host\(\\\"whoami.geekslab\\\")"))
    (log-file "/var/docker.whoami.log")
   )
))

The only feedback I get is this:

admin@geekslab ~/geekslab/scripts$ sudo herd status docker-whoami
Status of docker-whoami:
 It is stopped.
 It is enabled.
 Provides (docker-whoami).
 Requires (dockerd user-processes).
 Will not be respawned.

admin@geekslab ~/geekslab/scripts$ sudo herd start docker-whoami
 Service user-homes has been started.
 Service dockerd depends on elogind.
 Service docker-whoami depends on dockerd.
 herd: error: failed to start service docker-whoami

As stated before, nothing in /var/log/messages. I'm not sure where else to look. I feel like I'm missing something when trying to debug Shepherd services. I've also tried a lot of different combinations of escapes and such.

If I run the following from the shell though, it works fine:

sudo docker run --rm --name whoami --label "traefik.http.routers.whoami.rule=Host(\"whoami.geekslab\")" traefik/whoami

Notice the escaped quotes that need to be passed through. I am essentially trying to daemonize this docker run command.

Any Shepherd pointers here would be appreciated!







reply via email to

[Prev in Thread] Current Thread [Next in Thread]