Docker общий том не читается контейнером после изменения содержимого тома - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть следующий файл compose, в котором я делюсь некоторыми сгенерированными данными html из контейнера Jenkins на диск хоста и считываю эти данные в контейнере Nginx с диска хоста. Я использую Ubuntu Server 18.04 на AWS.

Проблема в том, что я могу прочитать содержимое jenkins/workspace/allure-report только один раз. После обновления данных html они становятся недоступными для Nginx и выдают код состояния 403.

Я перепробовал все возможные решения, но ничего не работает. Единственное безобразное решение - перезапускать контейнер Nginx после каждого обновления данных html. Мне не нравится этот способ, и я ищу некоторые встроенные функции docker, чтобы решить эту проблему.

Что не помогло: прямое распределение тома между контейнерами без использования хост-диска docker с использованием опции rslave , используя docker отдельный том, который можно использовать в качестве буфера между двумя контейнерами ... Я считаю, что это должно быть намного проще!

version: '2'

services:
  jenkins:
    container_name: jenkins
    image: "jenkins/jenkins"
    ports:
      - "8088:8080"
      - "50000:50000"
    env_file:
      - variables.env
    volumes:
      - ./jenkins:/var/jenkins_home

  selenoid:
    container_name: selenoid
    network_mode: bridge
    image: "aerokube/selenoid"
    # default directory for browsers.json is /etc/selenoid/
    command: -listen :4444 -conf /etc/selenoid/browsers.json -video-output-dir /opt/selenoid/video/ -timeout 3m
    ports:
      - "4444:4444"
    env_file:
      - variables.env
    volumes:
      - $PWD:/etc/selenoid/ # assumed current dir contains browsers.json
      - /var/run/docker.sock:/var/run/docker.sock

  selenoid-ui:
    container_name: selenoid-ui
    network_mode: bridge
    image: "aerokube/selenoid-ui"
    links:
      - selenoid
    ports:
      - "8080:8080"
    env_file:
      - variables.env
    command: ["--selenoid-uri", "http://selenoid:4444"]

  nginx:
    container_name: nginx
    image: "nginx"
    ports:
      - "80:80"
    volumes:
      - ./jenkins/workspace/allure-report:/usr/share/nginx/html:ro,rslave

1 Ответ

0 голосов
/ 12 февраля 2020

Нашел решение: самый простой способ получить доступ к динамическим c данным - это использовать volume_from в том контейнере, из которого вы хотите посмотреть.

Когда я настроил свой compose Файл, как это я столкнулся с другой проблемой - статус 403 ушел, но данные были stati c. Но это была моя вина, я неправильно использовал команду "cp -r", поэтому мои данные были скопированы только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...