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