I am trying to build a docker image. I have added `docker` and `docker-cli` to my system configuration and reconfigured the system. The `docker` command needs a docker daemon running. I have added the docker service to the system configuration file with `(service docker-service-type)` in the list of services. When I try to reconfigure the system I get this error message "guix system: error: service 'dockerd' requires 'networking', which is not provided by any service".
Bone Baboon writes: > I am trying to build a docker image. > > I have added `docker` and `docker-cli` to my system configuration and > reconfigured the system. The `docker` command needs a docker daemon > running. > > I have added the docker service to the system configuration file with > `(service docker-service-type)` in the list of services. When I try to > reconfigure the system I get this error message "guix system: error: > service 'dockerd' requires 'networking', which is not provided by any > service". Hey Bone Baboon! It is not 100% clear from your message how do you want to build a docker image. I'm assuming that you want to use standard docker tooling and you want to have docker daemon on YOUR system. Correct me I'm wrong here. Dockder service is one of the services that extends shepherd-root-service-type. They form dependency graph which is different from extension graph you might have red in guix manual. Each shepherd service has "provision" field that defines list of simbols that it provides and "requirement" field (defaulting to '()) that defines which services it requeres to run. Shepherd uses this information to spawn services in right order. But in your case procedure assert-valid-graph (found in guix) warned you that graph is invalid instead of producing shepherd configuration that will fail when you will boot. So. You need a service that provisionts 'networking! You should probably just use %desktop-services service list like so in your config. It contains bunch of services you normaly need including network-manager-service. (operating-system ... (services (append (list ;; list of your services goes here (service xfce-desktop-service-type) ;; your wm of choice (service docker-service-type)) ;; docker daemon %desktop-services))) > I have added `docker` and `docker-cli` to my system configuration and > reconfigured the system. The `docker` command needs a docker daemon > running. Note also that you dont need to add packages to system configuration to use them. You could just install it for your user profile. But there are other ways to build docker images on guix like guix system vm docker-image yourconf.scm or guix pack -f docker -S /bin=bin Check out info manual for these comands in guix if you havent yet :) -- David aka zzappie
David Dashyan writes: > It is not 100% clear from your message how do you want to build a docker > image. I'm assuming that you want to use standard docker tooling and > you want to have docker daemon on YOUR system. Correct me I'm wrong > here. Yes that is correct `docker build -t <tag> .` with a local docker daemon. > Dockder service is one of the services that extends > shepherd-root-service-type. They form dependency graph which is > different from extension graph you might have red in guix manual. Each > shepherd service has "provision" field that defines list of simbols that > it provides and "requirement" field (defaulting to '()) that defines > which services it requeres to run. Shepherd uses this information to > spawn services in right order. But in your case procedure > assert-valid-graph (found in guix) warned you that graph is invalid > instead of producing shepherd configuration that will fail when you will > boot. This is a nice feature. > So. You need a service that provisionts 'networking! It seems odd that a service does not take care of services it needs. It makes me think of a package that does not include the dependencies it needs to run. > You should probably just use %desktop-services service list like so in > your config. It contains bunch of services you normaly need including > network-manager-service. > > (operating-system > ... > (services > (append > (list > ;; list of your services goes here > (service xfce-desktop-service-type) ;; your wm of choice > (service docker-service-type)) ;; docker daemon > %desktop-services))) Thank you for this suggestion. There is a lot in %desktop-services that I do not need on my system. I am also trying to explicitly state imports so that I can learn more about the parts of the Guix repository I am using. > Note also that you dont need to add packages to system configuration to > use them. You could just install it for your user profile. Thank you for pointing this out. > But there are other ways to build docker images on guix like > > guix system vm docker-image yourconf.scm > > or > > guix pack -f docker -S /bin=bin > > Check out info manual for these comands in guix if you havent yet :) I am aware of these features and plan to explore them.
I have got the dockerd service working.
I ran into many error messages along the way.
"guix system: error: service 'dockerd' requires 'networking', which is
not provided by any service"
This was solved with `dhpc-client-service-type`.
"guix system: error: service 'dockerd' requires 'dbus-system', which is
not provided by any service"
This was solved with `dbus-service`.
"guix system: error: service 'dockerd' requires 'elogind', which is not
provided by any service"
This was solved with `elogind-service-type`.
I made these additions to my system configuration to get the dockerd
service working.
I added these imports:
```
((gnu services dbus) #:select (dbus-service))
((gnu services desktop) #:select (elogind-service-type))
((gnu services docker) #:select (docker-service-type))
((gnu services networking) #:select (dhcp-client-service-type))
```
I added these to the services section of the operation system
declaration:
```
(service dhcp-client-service-type)
(dbus-service)
(service elogind-service-type)
(service docker-service-type)
```
Then I reconfigured the system.
`sudo herd start dockerd` was not working. I restarted the computer and
dockerd was working.
Now `docker build -t <tag> .` is successful.
Bone Baboon writes:
> I am trying to build a docker image.
>
> I have added `docker` and `docker-cli` to my system configuration and
> reconfigured the system. The `docker` command needs a docker daemon
> running.
>
> I have added the docker service to the system configuration file with
> `(service docker-service-type)` in the list of services. When I try to
> reconfigure the system I get this error message "guix system: error:
> service 'dockerd' requires 'networking', which is not provided by any
> service".
Hello Bone Baboon!
Great to hear that you got it working!
Bone Baboon writes:
> David Dashyan writes:
>> It is not 100% clear from your message how do you want to build a docker
>> image. I'm assuming that you want to use standard docker tooling and
>> you want to have docker daemon on YOUR system. Correct me I'm wrong
>> here.
>
> Yes that is correct `docker build -t <tag> .` with a local docker
> daemon.
>
>> Dockder service is one of the services that extends
>> shepherd-root-service-type. They form dependency graph which is
>> different from extension graph you might have red in guix manual. Each
>> shepherd service has "provision" field that defines list of simbols that
>> it provides and "requirement" field (defaulting to '()) that defines
>> which services it requeres to run. Shepherd uses this information to
>> spawn services in right order. But in your case procedure
>> assert-valid-graph (found in guix) warned you that graph is invalid
>> instead of producing shepherd configuration that will fail when you will
>> boot.
>
> This is a nice feature.
>
>> So. You need a service that provisionts 'networking!
>
> It seems odd that a service does not take care of services it needs.
> It makes me think of a package that does not include the dependencies it
> needs to run.
I'm not sure why it is done this way. Perhaps because you could have
different service types providing same provision symbols? And you as a
user/admin chose which to chose. And also the dependency graph of guix
services enourmos as package dependency graph :)
--
David aka zzappie
Agr typos... need to make habit running ispell all the time... ... I'm not sure why it is done this way. Perhaps because you could have different service types providing same provision symbols? And you as a user/admin CHOOSE which to CHOOSE. And also the dependency graph of guix services NOT AS ENORMOUS as package dependency graph :) ... -- David aka zzappie