Question

docker-tcp.socket fails on coreos

Posted July 8, 2016 3.9k views
API Docker Configuration Management CoreOS

I’m on CoreOS stable (1010.6.0).
Whenever I reboot the droplet, I always get this error message:

Failed Units: 1
    docker-tcp.socket

Then if I issue:

journalctl -b -u docker-tcp.socket
-- Logs begin at Fri 2016-06-17 18:51:06 UTC, end at Fri 2016-07-08 06:42:55 UTC. --
Jul 08 06:33:24 coreos-512mb-nyc2-01 systemd[1]: docker-tcp.socket: Failed to listen on sockets: Cannot assign requested address
Jul 08 06:33:24 coreos-512mb-nyc2-01 systemd[1]: Failed to listen on Docker Socket for the API.
Jul 08 06:33:24 coreos-512mb-nyc2-01 systemd[1]: docker-tcp.socket: Unit entered failed state.
Jul 08 06:33:24 coreos-512mb-nyc2-01 systemd[1]: docker-tcp.socket: Failed to listen on sockets: Cannot assign requested address
Jul 08 06:33:24 coreos-512mb-nyc2-01 systemd[1]: Failed to listen on Docker Socket for the API.

I followed the procedure to enable the docker-tcp socket here:
https://coreos.com/os/docs/latest/customizing-docker.html

For now, if I stop docker.service manually, and start docker-tcp.socket first, then I can start docker.service without any problem. But, I must do this after each reboot, which is not terrible.

I would like to fix this error, so that my droplet boots correctly (and the docker-tcp.socket gets started without any error).

Here’s my docker-tcp.socket:

[Unit]
Description=Docker Socket for the API
Before=docker.service

[Socket]
ListenStream=172.17.0.1:2375
BindIPv6Only=both
Service=docker.service

[Install]
WantedBy=sockets.target

Here’s my docker.service:

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=docker.socket early-docker.target network.target
Requires=docker.socket early-docker.target

[Service]
Environment="DOCKER_CGROUPS=--exec-opt native.cgroupdriver=systemd"
EnvironmentFile=-/run/flannel_docker_opts.env
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
ExecStart=/usr/lib/coreos/dockerd daemon --host=fd:// --insecure-registry 0.0.0.0:5000 $DOCKER_OPTS $DOCKER_CGROUPS $DOCKER_OPT_BIP $DOCKER_OPT_MTU $DOCKER_OPT_IPMASQ

[Install]
WantedBy=multi-user.target

What’s wrong with my setup, and how would I ensure that docker-tcp.service gets loaded before docker.service?

1 comment
  • Can you add your cloud-config as well?

    #cloud-config
    
    coreos:
      units:
        - name: docker-tcp.socket
          command: start
          enable: true
          content: |
            [Unit]
            Description=Docker Socket for the API
    
            [Socket]
            ListenStream=2375
            BindIPv6Only=both
            Service=docker.service
    
            [Install]
            WantedBy=sockets.target
    

    It should look like that - with the docker-tcp.socket set to start and be enabled.

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

1 answer

Hi,

thanks for your quick reply.

I have no cloud-config for now.
I’m building everything manually.

docker-tcp.socket is enabled:

systemctl is-enabled docker-tcp.socket
enabled

Even though it is enabled, it’s not working, when I reboot the droplet. That’s why I’m getting the error message (as I said in my earlier post).
So, I need to type these commands manually, to have it working:

systemctl stop docker
systemctl start docker-tcp.socket
systemctl start docker

I was wondering if the ONLY way to have it working correctly, was by using a cloud-config file?
I can’t believe…

Submit an Answer