docker-compose volumes_from等同于版本3

Rob*_*Rob 41 docker docker-compose

我正在尝试使用docker compose创建Nginx/PHP FPM设置,并且遇到版本3卷语法/更改的问题.

我的Dockerfile:

FROM php:7-fpm
VOLUME /var/www/html
Run Code Online (Sandbox Code Playgroud)

我的docker-compose.yml:

version: "3"
services:
  php:
    build: .
    volumes:
      - ./html:/var/www/html
  web:
    image: nginx
    links:
      - php
    ports:
      - "8888:80"
    volumes:
      - php:/var/www/html
      - ./default.conf:/etc/nginx/conf.d/default.conf
volumes:
  php:
Run Code Online (Sandbox Code Playgroud)

当我添加一个index.php文件时./html,我可以通过访问http:// localhost:8888来查看,但是任何静态文件(如CSS)都返回404,因为Nginx无法在其容器中找到它们(/var/www/html在nginx容器上为空).使用版本3 docker compose文件不再具有volumes_from,这基本上就是我想要复制的内容.

如何让它与版本3一起使用?

Buk*_*gey 30

使用"命名卷"在需要定义的容器之间共享文件

1)volumes:yml文件顶层的部分并定义卷名

volumes:
  php:
Run Code Online (Sandbox Code Playgroud)

2)volume像你一样定义第一个容器上的部分(将挂载共享的位置)

web:
    volumes:
      - php:/var/www/html #<container_name>:<mount_point>
Run Code Online (Sandbox Code Playgroud)

3)volume在第二个容器上定义部分(共享将从中安装)

php:
  volumes:
    - php:/var/www/html
Run Code Online (Sandbox Code Playgroud)

4)(可选)如果需要在主机上存储卷数据,可以使用local-persist docker插件.您可以指定docker volume driver和存储数据的路径.

volumes:
  php:
    driver: local-persist
    driver_opts:
      mountpoint: /path/on/host/machine/
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您忘记定义php容器的卷名称.只需更换

  php:
    build: .
    volumes:
      - ./html:/var/www/html
Run Code Online (Sandbox Code Playgroud)

  php:
    build: .
    volumes:
      - php:/var/www/html
Run Code Online (Sandbox Code Playgroud)

并使用Local Persist Docker插件

  • 那么,如果要将本地文件夹安装到容器中,命名卷的好处是什么?或者换句话说:这是否等于“在v3中没有'volumes_from`的真正等效项”?因为在v2中,我可以将volume_from用作一堆安装的包装,所以我定义了一次安装,然后通过`volumes_from`在其他服务的相同安装上“包含”。如果我正确理解了您的答案,则在v3中,我将必须在每种服务上分别定义每个安装,对吗? (2认同)
  • 请注意,如果`/var/www/html` 中的容器映像中的文件仅用于初始化,则此方法有效。创建卷后,它不会被`php` 容器的更新图像更新。 (2认同)