【问题标题】:How created named volume with folder path in docker-compose如何在 docker-compose 中使用文件夹路径创建命名卷
【发布时间】:2019-06-26 08:20:22
【问题描述】:

我正在使用 Docker 为 Wordpress 配置多容器设置(根据 this article)。

目前,我有一个 wordpress 服务,其中有一个命名卷,如下所示:

volumes:
  - wordpress:/var/www/html

这对于默认的 Wordpress 安装非常有效。但我也有一些文件需要传递到主题/插件等的容器中。

我知道这也可以通过在服务器上的两个路径和相关容器之间设置映射来实现。像这样的:

volumes: 
  - ./wp-content:/var/www/html/wp-content 

我的理解是卷被命名以便其他容器可以与之交互(在我的情况下是必需的,您可以在下面的完整 docker-compose.yaml 文件中看到)。

那么,创建 命名卷 的正确方法是什么?该卷设置路径以便将我的文件挂载到容器上?

这是完整的docker-compose.yaml 文件:

version: '3'

services:
  db:
    image: mysql:5.7
    container_name: db
    restart: unless-stopped
    env_file: .env
    volumes: 
      - dbdata:/var/lib/mysql
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - app-network

  wordpress:
    depends_on: 
      - db
    image: wordpress:5.1.1-fpm-alpine
    container_name: wordpress
    restart: unless-stopped
    env_file: .env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=$MYSQL_USER
      - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
      - WORDPRESS_DB_NAME=$MYSQL_DATABASE
    volumes:
      - wordpress:/var/www/html
    networks:
      - app-network

  webserver:
    depends_on:
      - wordpress
    image: nginx:1.15.12-alpine
    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - wordpress:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - app-network

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    env_file: .env
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    networks:
      - app-network

  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    env_file: .env
    volumes:
      - certbot-etc:/etc/letsencrypt
      - wordpress:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email ${LETSENCRYPT_EMAIL} --agree-tos --no-eff-email --staging -d ${DOMAIN} -d www.${DOMAIN}

volumes:
  certbot-etc:
  wordpress:
  dbdata:

networks:
  app-network:
    driver: bridge

【问题讨论】:

  • 能否请您解释一下问题出在哪里,wordpress:/var/www/html 将您容器上的路径设置为/var/www/html
  • 好的,首先感谢您抽出时间@LinSel
  • 我正在寻找我放置在服务器上(位于用户目录中)的文件以安装在容器中。就像./wp-content:/var/www/html/wp-content 一样。但由于 wordpress 命名版本在多个位置使用,我不确定如何执行此操作,因为我认为删除名称会导致容器之间的连接中断
  • 如果不是很明显,我对 docker 还是很陌生,所以这对我来说有点学习曲线!

标签: wordpress docker docker-compose docker-volume


【解决方案1】:

您可以使用以下命令将文件复制到您的命名卷:

docker cp /my/folder/myfile container:/var/www/html/myfile

container 替换为您的容器名称。

【讨论】:

  • 我正在寻找安装卷,以便它是双向连接。由于 WordPress 有一个 /wp-content/uploads 目录来存储 CMS 上传的文件,因此当容器关闭时这些文件将会丢失。所以一个简单的副本并不能解决问题。
  • 复制到 /var/www/html/myfile 不会丢失任何数据,因为它是一个命名卷,关闭容器不会删除任何内容
猜你喜欢
  • 2020-04-06
  • 2016-10-08
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2023-03-25
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多