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 вы используете привязку к некоторой папке на хосте.