27a931dbcd9a7640d46d03c3df29f54ab5cb324f
By:
PanCake

docker-tcp.socket fails on coreos

July 8, 2016 1.8k 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.

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...

Have another answer? Share your knowledge.