无法在docker-compose中定义的服务之间共享卷

时间:2018-04-30 15:41:22

标签: docker docker-compose

我正在运行Docker for Mac版本17.12.0-ce-mac55

我有一个docker-compose文件,我正在从docker-compose版本3转换为版本2,以便更好地使用Openshift。

---
version: '2'
services:
  fpm:
    build:
      context: .
      dockerfile: Dockerfile.openshift
      args:
        TIMEZONE: America/Chicago
        APACHE_DOCUMENT_ROOT: /usr/local/apache2/htdocs
    image: widget-fpm
    restart: always
    depends_on:
      - es
      - db
    environment:
    # taken from sample.env
      - TIMEZONE=${TIMEZONE}
      - APACHE_DOCUMENT_ROOT=/usr/local/apache2/htdocs
      - GET_HOSTS_FROM=dns
      - SYMFONY__DATABASE__HOST=db
      - SYMFONY__DATABASE__PORT=5432
      - SYMFONY__DATABASE__NAME=widget
      - SYMFONY__DATABASE__USER=widget
      - SYMFONY__DATABASE__PASSWORD=widget
      - SYMFONY__DATABASE__SCHEMA=widget
      - SYMFONY__DATABASE__DRIVER=pdo_pgsql
      - SYMFONY_ENV=prod
      - SYMFONY__ELASTICSEARCH__HOST=es:9200
      - SYMFONY__SECRET=dsakfhakjhsdfjkhajhjds
      - SYMFONY__LOCALE=en
      - SYMFONY__RBAC__HOST=rbac
      - SYMFONY__RBAC__PROTOCOL=http
      - SYMFONY__RBAC__CONNECT__PATH=v1/connect
      - SYMFONY__PROJECT_URL=http://localhost
      - SYMFONY__APP__NAME=widget
      - SYMFONY__CURRENT__API__VERSION=1
    volumes:
      # use docroot env to change this directory
      - src:/usr/local/apache2/htdocs
      - symfony-cache:/usr/local/apache2/htdocs/app/cache
      - symfony-log:/usr/local/apache2/htdocs/app/logs
    expose:
      - "9000"
    networks:
      - client-network
      - data-network
    labels:
      kompose.service.expose: "false"
  webserver:
    build: ./provisioning/webserver/apache
    image: widget_web
    restart: "no"
    ports:
      - "80"
      - "443"
    volumes_from:
      - fpm:ro
    depends_on:
      - fpm
    networks:
      - client-network
    labels:
      com.singlehop.description: "Widget Service Web Server"
      com.singlehop.development: "false"
      kompose.service.expose: "true"
      kompose.service.type: "nodeport"
  db:
    build: ./provisioning/database/postgres
    image: widget_postgres
    restart: always
    volumes:
      - data-volume:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: widget
      POSTGRES_PASSWORD: widget
    expose:
      - "5432"
    networks:
      - data-network
    labels:
      com.singlehop.description: "Widget Service Postgres Database Server"
      com.singlehop.development: "false"
      io.openshift.non-scalable: "true"
      kompose.service.expose: "false"
      kompose.volume.size: 100Mi
  es:
    image: elasticsearch:5.6
    restart: always
    environment:
      #- cluster.name=docker-cluster
      #- bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    command: ["-Ecluster.name=docker-cluster", "-Ebootstrap.memory_lock=true"]
    ulimits:
      memlock:
        soft: -1
        hard: -1
    labels:
      com.singlehop.description: "Generic Elasticsearch5 DB"
      com.singlehop.development: "false"
      kompose.service.expose: "false"
      kompose.volume.size: 100Mi
    volumes:
      - es-data:/usr/share/elasticsearch/data
    expose:
      - "9200-9300"
    networks:
      - data-network
  migration:
    # @todo can we use the exact same build/image I created above?
    image: singlehop/widget-fpm
    environment:
    # taken from sample.env
      - TIMEZONE=America/Chicago
      - APACHE_DOCUMENT_ROOT=/usr/local/apache2/htdocs
      - GET_HOSTS_FROM=dns
      - SYMFONY__DATABASE__HOST=db
      - SYMFONY__DATABASE__PORT=5432
      - SYMFONY__DATABASE__NAME=widget
      - SYMFONY__DATABASE__USER=widget
      - SYMFONY__DATABASE__PASSWORD=widget
      - SYMFONY__DATABASE__SCHEMA=widget
      - SYMFONY__DATABASE__DRIVER=pdo_pgsql
      - SYMFONY_ENV=prod
      - SYMFONY__ELASTICSEARCH__HOST=es:9200
      - SYMFONY__SECRET=dsakfhakjhsdfjkhajhjds
      - SYMFONY__LOCALE=en
      - SYMFONY__PROJECT_URL=http://localhost
      - SYMFONY__APP__NAME=widget
      - SYMFONY__CURRENT__API__VERSION=1
    entrypoint: ["/usr/local/bin/php","app/console","--no-interaction"]
    command: doctrine:migrations:migrate
    volumes:
      - src:/usr/local/apache2/htdocs
    depends_on:
      - db
    networks:
      - data-network
    labels:
      com.singlehop.description: "Widget Automated Symfony Migration"
      com.singlehop.development: "false"
volumes:
  src: {}
  data-volume: {}
  es-data: {}
  symfony-cache: {}
  symfony-log: {}
networks:
  client-network:
  data-network:

我正在使用fpm服务来充当数据容器并将PHP代码共享给Web服务器。由于某种原因,未将命名卷 src 共享到Web服务器/容器。我尝试过设置并使用 volumes_from

我认为这是可能的,我觉得在widget_web Dockerfile中再做一个源代码副本是不好的做法。

1 个答案:

答案 0 :(得分:0)

fpm服务中的 depends_on 打破指定的卷 src 。当我删除 depends_on 声明时,它就像我认为它会起作用一样。我无法判断这是一个错误还是按设计工作。