bitnami консул не может получить доступ к файлу или каталогу с помощью docker настольного компьютера - PullRequest
1 голос
/ 30 марта 2020

Запуск Консула с docker рабочим столом с использованием windows контейнеров и включенным экспериментальным режимом работает хорошо. Однако, если я пытаюсь подключить файл данных bitnami консул к локальному тому, я получаю следующую ошибку:

chown: cannot access '/bitnami/consul'

powershell chown error

My составной файл выглядит следующим образом:

version: "3.7"
services:
  consul:
    image: bitnami/consul:latest
    volumes:
      - ${USERPROFILE}\DockerVolumes\consul:/bitnami
    ports:
      - '8300:8300'
      - '8301:8301'
      - '8301:8301/udp'
      - '8500:8500'
      - '8600:8600'
      - '8600:8600/udp'
    networks: 
      nat:        
        aliases:
          - consul

Если я удаляю часть томов, все работает нормально, но я не могу сохранить свои данные. Если следовать инструкциям в файле readme . Говорят о наличии соответствующих разрешений, но я не знаю, как заставить это работать, используя docker рабочий стол.

Примечание: Если я не монтирую /bitnami, но /bitnami/consul Я получаю следующую ошибку: 2020-03-30T14:59:00.327Z [ERROR] agent: Error starting agent: error="Failed to start Consul server: Failed to start Raft: invalid argument" powershell failed to start Raft

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Другой вариант - отредактировать docker -compose.yaml, чтобы развернуть контейнер консула как root, добавив директиву user: root:

version: "3.7"
services:
  consul:
    image: bitnami/consul:latest
    user: root
    volumes:
      - ${USERPROFILE}\DockerVolumes\consul:/bitnami
    ports:
      - '8300:8300'
      - '8301:8301'
      - '8301:8301/udp'
      - '8500:8500'
      - '8600:8600'
      - '8600:8600/udp'
    networks: 
      nat:        
        aliases:
          - consul

Без user: root контейнер выполняется как не root (пользователь 1001):

▶ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                              NAMES
0c590d7df611        bitnami/consul:1    "/opt/bitnami/script…"   4 seconds ago       Up 3 seconds        0.0.0.0:8300-8301->8300-8301/tcp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301->8301/udp, 0.0.0.0:8600->8600/tcp, 0.0.0.0:8600->8600/udp   bitnami-docker-consul_consul_1

▶ dcexec 0c590d7df611
I have no name!@0c590d7df611:/$ whoami
whoami: cannot find name for user ID 1001

Но при добавлении этой строки контейнер выполняется как root:

▶ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                                              NAMES
ac206b56f57b        bitnami/consul:1    "/opt/bitnami/script…"   5 seconds ago       Up 4 seconds        0.0.0.0:8300-8301->8300-8301/tcp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301->8301/udp, 0.0.0.0:8600->8600/tcp, 0.0.0.0:8600->8600/udp   bitnami-docker-consul_consul_1

▶ dcexec ac206b56f57b
root@ac206b56f57b:/# whoami
root

Если контейнер выполняется как root не должно быть никаких проблем с разрешениями в томе хоста.

0 голосов
/ 31 марта 2020

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

Использование каталогов хоста в качестве том, который вам нужен, чтобы убедиться, что каталог, который вы монтируете в контейнер, имеет надлежащие разрешения, в этом случае разрешение на запись для others. Вы можете изменить разрешение, запустив sudo chmod o+x ${USERPROFILE}\DockerVolumes\consul (или правильный путь к каталогу хоста).

Эта локальная папка создается при первом запуске docker-compose up или вы можете создать ее самостоятельно с помощью mkdir. После создания (вручную или автоматически) вы должны дать соответствующие разрешения для chmod.

. Я не знаком со средами Docker desktop или Windows, но вы должны быть в состоянии выполнять аналогичные действия, используя CLI.

...