Docker Compose-Compartir volumen con nombre entre varios contenedores


Estoy usando docker-compose y v3. Estoy tratando de montar un volumen en docker:

./appdata:/appdata

Me gustaría tener esto como un volumen y luego hacer referencia a ese volumen de múltiples contenedores. La referencia de configuración del volumen solo muestra data-volume: como un volumen con nombre, sin valor, por lo que no se parece al anterior.

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume

volumes:
     app-volume: ./appdata:/appdata

Esto me da:

ERROR: En el archivo './ docker-compose.yml', volume 'app-volume' debe ser una asignación cadena.

Obviamente sé que necesito cambiar el par clave/valor volumes, pero no estoy seguro cómo cambiar esto para poder compartir un volumen entre servicios.

También he comprobado volumes_from pero esto efectivamente solo permite la herencia de otros contenedores. He visto a alguien usar volumes_from en otro contenedor que contiene la asignación que quieren, pero con command: true configurado para que el contenedor nunca se ejecute realmente, lo que a mí me parece un truco.

¿Cómo puedo hacer ¿esto?


Nota, yo hago tengo el siguiente trabajo:

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

Pero eso es solo duplicación y es algo que espero que un volumen con nombre pueda ayudarme a evitar : -)

Author: Jimbo, 2017-05-31

2 answers

Los volúmenes nombrados se pueden compartir entre contenedores de la siguiente manera

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume: location_in_the_container

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume: location_in_the_container

volumes:
     app-volume: 

He aquí un ejemplo de configuración que uso para una mejor comprensión. Estoy exponiendo los archivos estáticos generados desde mi contenedor web a un volumen llamado static-content que luego es leído y servido por el contenedor nginx

services:
  nginx:
    container_name: nginx
    build: ./nginx/

    volumes:
      - static-content:/usr/src/app

  web:
    container_name: web
    env_file: .env
    volumes:
      - static-content:/usr/src/app/public
    environment:
      - NODE_ENV=production

    command: npm run package

volumes:
  static-content:
 39
Author: Kannaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 12:42:10

Esto lo resuelve sin usar volúmenes nombrados:

      volumes:
          - ./appdata:/appdata

Por lo tanto, se ve como:

services:

  nginx:
      build: ./nginx/
      ports:
          - 80:80
      links:
          - php
      volumes:
          - ./appdata:/appdata

  php:
      build: ./php/
      expose:
          - 9000
      volumes:
          - ./appdata:/appdata
 12
Author: Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 12:28:24