DOCKER_OPTS do not work in config file /etc/default/docker

前端 未结 9 953
野性不改
野性不改 2020-12-13 09:59

I have changed /etc/default/docker with DOCKER_OPTS=\"-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock\" (docker version 1.4.1 in ubuntu 14.0

相关标签:
9条回答
  • 2020-12-13 10:27

    In reply to the systemd comments in combination with Ubuntu: Ubuntu 14.04 still uses Upstart, so the changes to /etc/default/docker should have had the desired effect. It isn't until 15.04 that Ubuntu started using systemd by default.

    In case you have Ubuntu 15.04 or later and thus need to use systemd, or if you explicitly choose to use systemd before 15.04, the correct and simplest way to get the desired effect of the OP, a TCP socket, would be:

    1. Create the file /etc/systemd/system/docker.service.d/docker-tcp.conf
    2. Add the contents below
    3. Execute sudo systemctl daemon-reload
    4. Execute sudo systemctl restart docker

    File contents:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/docker daemon --host=tcp://127.0.0.1:2375
    
    0 讨论(0)
  • 2020-12-13 10:28

    See here for later versions of Debian/Ubuntu that use systemd.

    This link explains how to correctly modify a systemd unit file to work with DOCKER_OPTS: https://github.com/docker/docker/issues/9889

    Essentially you create a /etc/systemd/system/docker.service.d/docker.conf file and specify your overrides there.

    I had to do something like the following in the aforementioned file to launch docker with the DOCKER_OPTS environment variable in a systemd environment:

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network.target docker.socket
    Requires=docker.socket
    
    [Service]
    EnvironmentFile=-/etc/default/docker
    ExecStart=
    ExecStart=/usr/bin/docker -d $DOCKER_OPTS -H fd://
    MountFlags=slave
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    
    [Install]
    WantedBy=multi-user.target
    

    Current docker install process seems to neglect the systemd unit file.

    0 讨论(0)
  • 2020-12-13 10:31

    Using the platform independent daemon-configuration-file seems much cleaner.

    Add "hosts" to your /etc/docker/daemon.json (or /custom/path/to/daemon/config.json if you're using --config-file option while starting the dockerd):

    {
    ...
    "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"],
    ...
    }
    

    restart the daemon:

    sudo systemctl restart docker
    
    0 讨论(0)
  • 2020-12-13 10:40

    After checking docker source code (config.go and flags.go), I would say that the options you can pass in $DOCKER_OPTS are options for docker itself, and -H or --host is an option for docker daemon. As a workaround to solve your problem, you can edit the init script file you are using to include the -H option there. For example:

    • If you are using upstart init system, edit the file /etc/init/docker.conf changing the exec line with exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
    • If you are using sysvinit init system, edit the file /etc/init.d/docker changing the starting lines with something like:

    Use this command:

    start-stop-daemon --start --background \
        --no-close \
        --exec "$DOCKER" \
        --pidfile "$DOCKER_SSD_PIDFILE" \
        --make-pidfile \
        -- \
            -H "tcp://127.0.0.1:2375" \
            -H "unix:///var/run/docker.sock" \
            -d -p "$DOCKER_PIDFILE" \
            $DOCKER_OPTS >> \
            "$DOCKER_LOGFILE" 2>&1 
        log_end_msg $?
        ;;
    
    0 讨论(0)
  • 2020-12-13 10:43

    According to docker documentation, The recommended way to configure the daemon flags and environment variables for your Docker daemon is to use a systemd drop-in file.

    So, for this specific case, do the following:

    1. Use the command sudo systemctl edit docker.service to open an override file for docker.service in a text editor.

    2. Add or modify the following lines, substituting your own values.

      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
      
    3. Save the file.

    4. Reload the systemctl configuration.

       $ sudo systemctl daemon-reload
      
    5. Restart Docker:

       $ sudo systemctl restart docker.service
      
    6. Check to see whether the change was honored by reviewing the output of netstat to confirm dockerd is listening on the configured port.

      $ sudo netstat -lntp | grep dockerd
      tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
      
    0 讨论(0)
  • 2020-12-13 10:46

    I had a similar challenge. When I started looking to begin moving some systems from Ubuntu 14.04 to Ubuntu 16.04. My goal was to use one dockerd configuration file with dockerd flags (DOCKER_OPTS) for both Ubuntu 16.04 (systemd) and Ubuntu 14.04 (Upstart) other than /etc/docker/daemon.json. I chose not to use /etc/docker/daemon.json for docker daemon configuration because json does not support comments.

    I wanted a systemd design to use an override file, which only modifies dockerd flags. It uses the default Docker systemd configuration file (/lib/systemd/system/docker.service) for other Docker settings. Another objective was to customise systemd on each system after each change or boot.

    It solves my challenge. It may help you.

    https://github.com/BradleyA/docker-scripts/tree/master/dockerd-configuration-options

    git clone https://github.com/BradleyA/docker-scripts
    cd docker-scripts/dockerd-configuration-options
    
    0 讨论(0)
提交回复
热议问题