Назад | Перейти на главную страницу

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

Пожалуйста, посмотрите здесь: 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 это докер-том. Однако в компоновке вы используете привязку к какой-либо папке на хосте.