Пользователи, добавленные в группу Docker, не сохраняются после перезагрузки - PullRequest
0 голосов
/ 01 мая 2018

Я использую упаковщик для создания изображения для доставки, и у меня странная проблема. Я добавляю пользователей в группу Docker со следующими строками

"sudo groupadd docker",
"sudo usermod -aG docker {{user `service_user`}}",
"sudo usermod -aG docker {{user `config_user`}}",
"newgrp docker",

Во время выполнения шаблона упаковщика все работает нормально; команда выводит ожидаемые значения, и изображение создается. Packer оставляет выключенный vm на esx (я использую vsphere). Я запускаю его, и если я вхожу в систему как пользователь службы, я получаю следующие результаты:

seven10@seven10-sfm:~$ groups
seven10 adm cdrom sudo dip plugdev lxd lpadmin sambashare
seven10@seven10-sfm:~$ 

но группы докеров нигде не найти! Но группа существует:

seven10@seven10-sfm:~$ cat /etc/group|grep docker
docker:x:999:

Если я перезапущу команды usermod, я правильно добавлюсь в группы, и правильное членство будет сохраняться после перезагрузки. Однако весь смысл в автоматизации этого состоит в том, чтобы избежать необходимости входить в систему и вводить команды usermod. Кто-нибудь знает, что с этим происходит и как я могу это исправить?

РЕДАКТИРОВАТЬ: Добавлена ​​версия шаблона, которая дает те же результаты

{
  "variables": {
    "has_automator": "",
    "has_hydrator": "",
    "has_mongo": "",
    "has_rabbit": "",
    "service_user": "seven10",
    "service_user_pass": "****",
    "config_user": "config",
    "config_user_pass": "****",

    "rabbit_version": "3.6.0-management",
    "mongo_version" : "3.4.4",

    "docker_user": "****",
    "docker_pass": "",
    "docker_network_name": "****",

    "esx_host": "****",
    "vcenter_server": "****",
    "vcenter_datacenter": "*****",
    "vcenter_datastore": "*****",
    "vcenter_username": "*****",
    "vcenter_password": "",

    "hydra_version": "",
    "hydra_name": "",
    "vm_disk_size": "100",
    "vm_cpu": "4",
    "vm_ram": "8000",
    "vm_template": "Ubuntu-16.04"
  },
  "builders": [
    {
      "type": "vsphere",
      "vcenter_server": "{{user `vcenter_server`}}",
      "host":           "{{user `esx_host`}}",
      "datacenter": "{{user `vcenter_datacenter`}}",
      "datastore":  "{{user `vcenter_datastore`}}",
      "username":   "{{user `vcenter_username`}}",
      "password":   "{{user `vcenter_password`}}",
      "template":   "{{user `vm_template`}}",
      "vm_name":    "{{user `hydra_name`}}-{{user `hydra_version`}}",
      "disk_size":  "{{user `vm_disk_size`}}",
      "CPUs":       "{{user `vm_cpu`}}",
      "RAM":        "{{user `vm_ram`}}",
      "insecure_connection": true,
      "ssh_username": "{{user `service_user`}}",
      "ssh_password": "{{user `service_user_pass`}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 10"
      ]
    },
    {
      "type": "shell",
      "execute_command": "echo '{{user `service_user_pass`}}' | sudo -S sh -c '{{ .Vars }} {{ .Path }}'",
      "inline": [
        "echo 'creating config user account'",
            "useradd {{user `config_user`}} -s /bin/bash -m", 
            "echo {{user `config_user`}}:{{user `config_user_pass`}} | chpasswd"
      ]
    },

     {
        "type": "shell",
        "execute_command": "echo '{{user `service_user_pass`}}' | sudo -S sh -c '{{ .Vars }} {{ .Path }}'",
        "inline": [
            "echo 'Adding Docker repo to Apt'",
            "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -",
            "sudo apt-key fingerprint 0EBFCD88 | grep docker@docker.com || exit 1",
            "sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\"",

        "echo Updating apt index",
        "sudo apt-get update",
            "echo 'remove any old vmware tools'",
            "sudo apt-get remove -y --purge open-vm-tools",

            "echo 'installing required packages'",
            "sudo apt-get install -y openssh-server vim curl ufw nfs-common unzip linux-image-extra-$(uname -r) apt-transport-https ca-certificates software-properties-common open-vm-tools-desktop docker-ce openjdk-8-jre-headless",

            "echo 'Installing docker",
            "sudo groupadd docker",


            "sudo usermod -aG docker {{user `service_user`}}",
            "sudo usermod -aG docker {{user `config_user`}}",
            "newgrp docker",

            "echo 'Install docker-compose",
            "sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose",
            "sudo curl -L https://raw.githubusercontent.com/docker/compose/1.18.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose",
            "sudo chmod +x /usr/local/bin/docker-compose",
            "docker-compose --version",

            "echo 'Log in to dockerhub'",
            "echo {{user `docker_pass`}} | docker login -u {{user `docker_user`}} --password-stdin",

        "echo 'creating docker network'",
        "docker network create -d bridge {{user `docker_network_name`}}",
        "chown -R {{user `service_user`}}:{{user `service_user`}} /home/{{user `service_user`}}/.docker"

      ]
    }
  ]
}

Шаблон vm - это просто машина, которую я запустил с ISO 16.04, установил базу с именем пользователя, совпадающим с именем service_user, а затем экспортировал как шаблон в vsphere. В конце концов я собираюсь переместить ISO вместо шаблона, но это выходит за рамки этого вопроса.

РЕДАКТИРОВАТЬ 2: Я попытался добавить вывод команды groups после команды newgrp docker с помощью любого из следующих

 "groups"
 "echo $(groups)"
 "echo \"$(groups)\"

и все, что я получаю от этого, - это фактическая команда (то есть: vsphere: echo "$(groups)"). Таким образом, кажется, что причина, по которой пользователь не добавлен в группу, может быть в том, что он просто повторяет команды. Вот что выводит соответствующий раздел шаблона при запуске:

==> vsphere: Provisioning with shell script: /tmp/packer-shell518775104
  vsphere: Installing docker
  vsphere: sudo groupadd docker
  vsphere: sudo usermod -aG docker seven10
  vsphere: sudo usermod -aG docker config
  vsphere: newgrp docker
  vsphere: echo displaying groups
vsphere: echo "$(groups)"

1 Ответ

0 голосов
/ 02 мая 2018

Проблема была расположена в этом разделе:

 "echo 'Installing docker",
 "sudo groupadd docker",

 "sudo usermod -aG docker {{user `service_user`}}",
 "sudo usermod -aG docker {{user `config_user`}}",
 "newgrp docker",

 "echo 'Install docker-compose",

обратите внимание, что в верхнем и нижнем эхо-операторах отсутствует завершающий '. Таким образом, все, что находится между ними, рассматривалось как часть начального эха.

Проверьте свои терминаторы строки, дети.

...