docker имеет разрешение на использование тома, а docker-compose - нет

Я установил Docker на сервере Amazon Linux и дал ему разрешения с sudo usermod -aG docker $USER, Когда я запускаю свои док-контейнеры Jenkins (у которых есть домашние каталоги на томе EBS, смонтированном в /var/lib/docker/volumes) из командной строки;

docker run -d \
--restart=always \
--name=jenkins-core \
--hostname=jenkins-core \
-p 8080:8080 \
-p 50000:50000 \
--env JENKINS_OPTS="--prefix=/core" \
-v jenkins-core:/var/jenkins_home \
jenkins/jenkins:lts

Все отлично работает Однако, когда я пытаюсь начать это с docker-compose up -d или же sudo docker-compose up -d Я получил;

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

и контейнеры Docker входят в цикл загрузки, пытаясь перезапустить. Я не могу понять, почему разрешения не так на docker-compose но хорошо на docker,

я пытался sudo chown $(whoami):$(whoami) /usr/local/bin/docker-compose но это не сработало. Я установил docker-compose отсюда; https://docs.docker.com/compose/install/

здесь docker-compose.yml также есть .env файл для переменных (не прилагается)

version: "3.6"
services:
  jenkins-core:
    image:           jenkins/jenkins:lts
    container_name:  jenkins-core
    restart:         always
    ports:
      - ${JENKINS_CORE_HOST_PORT_8080}:${JENKINS_PORT_8080}
      - ${JENKINS_CORE_HOST_PORT_50000}:${JENKINS_PORT_50000}
    environment:
      - JENKINS_OPTS=--prefix=${JENKINS_CORE_PREFIX}
      - JAVA_OPTS=-Duser.timezone=${TZ}
    volumes:
      - ${JENKINS_CORE_HOME_DIR}:/var/jenkins_home
  jenkins-integrations:
    image:           jenkins/jenkins:lts
    container_name:  jenkins-integrations
    restart:         always
    ports:
      - ${JENKINS_INTEGRATIONS_HOST_PORT_8080}:${JENKINS_PORT_8080}
      - ${JENKINS_INTEGRATIONS_HOST_PORT_50000}:${JENKINS_PORT_50000}
    environment:
      - JENKINS_OPTS=--prefix=${JENKINS_INTEGRATIONS_PREFIX}
      - JAVA_OPTS=-Duser.timezone=${TZ}
    volumes:
      - ${JENKINS_INTEGRATIONS_HOME_DIR}:/var/jenkins_home
  portainer:
    image:           portainer/portainer
    container_name:  portainer
    restart:         always
    environment:
      - TZ=${TZ}
    ports:
      - ${PORTAINER_PORT_9000}:9000
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ${DOCKERCONFDIR}/portainer:/data
    command:         -H unix:///var/run/docker.sock
  watchtower:
    image:           v2tec/watchtower
    container_name:  watchtower
    restart:         always
    environment:
      - TZ=${TZ}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command:         --schedule 0 0 4 * * * --cleanup

1 ответ

Решение

Пожалуйста, посмотрите здесь: https://github.com/jenkinsci/docker/blob/master/README.md разделе Использование. Это говорит NOTE: Avoid using a bind mount from a folder on the host machine into /var/jenkins_home, as this might result in file permission issues (the user used inside the container might not have rights to the folder on the host machine)...

Так что причина, почему ваш docker run работает из-за -v jenkins-core:/var/jenkins_home где jenkins-core том докера Однако в compose вы используете привязку к некоторой папке на хосте.

Другие вопросы по тегам