【问题标题】:Is it possible to specify absolute path in Docker-compose for build context?是否可以在 Docker-compose 中为构建上下文指定绝对路径?
【发布时间】:2020-03-29 19:22:38
【问题描述】:

这里是场景:

  1. SQL SERVER 相关文件位于:C:\Temp\docker
  2. .NET API 相关文件位于:C:\Users\Samurai\source\repos\ApiForDocker\ApiForDocker

据我从这个官方示例 docker-compose 文件中了解到:

version: "3"
services:

  web:
    build: .  // relative path goes over here
    links:
      - "db:database"
  db:
    image: postgres

现在我可以将 docker-compose 文件保存在任一文件夹中。 1) 或 2) 但是如何在不移动文件的情况下为其他人提供正确的路径? 我现在不想移动文件的原因是因为我担心它可能会导致重建没有缓存的容器。虽然现在这对我来说可能没什么大不了的,但我只是在努力学习。

编辑:

version: "3"
services:
    coreapi:
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - "5000:5000"
    sqlserver:
        build:
            context: C:\Temp\docker
            environment: 
                ACCEPT_EULA="Y"
                SA_PASSWORD="Pwd12345!"
        ports:
            - "11433:1433"

错误

ERROR: The Compose file '.\docker-compose.yml' is invalid because:
services.sqlserver.build contains unsupported option: 'environment'

【问题讨论】:

  • context: 目录的文档表明它不需要是相对路径,因此您可以使用两个图像树的绝对路径。同样,如果您使用绑定挂载将数据库数据存储在主机上,它可以使用绝对路径。如果您尝试一下,您会遇到什么具体问题吗?
  • @DavidMaze 我尝试了绝对路径(见我的编辑)它给了我ERROR: The Compose file '.\docker-compose.yml' is invalid because: services.sqlserver.build contains unsupported option: 'environment' 不确定是不是因为绝对路径
  • 在更新后的文件中,environment:缩进了一级太多;它不能低于build:

标签: .net sql-server docker docker-compose yaml


【解决方案1】:

您不能引用 docker 构建上下文之外的文件。因此,您要么必须将构建上下文设置为包含所需所有内容的第一个公共目录,要么将要执行的文件复制到目录下的映像中并在那里构建映像。

只要文件内容相同,docker就可以使用构建缓存。

【讨论】:

  • 事情就是这样。我在其中一个文件中有一个数据库还原脚本。 RESTORE FILELISTONLY FROM DISK = 'C:\Temp\docker\AdventureWorksLT2017.bak' 现在你可以看到如果我移动这个文件,我将不得不更改 .bak 文件的路径。我不确定会发生什么。
  • 该文件是在构建时使用还是在运行时使用?如果它是在运行时,那么你需要将文件放到容器中的那个目录中,但它可以在构建时存在于文件系统上的任何位置,只要该位置在构建上下文下。
猜你喜欢
  • 2019-04-22
  • 2018-06-15
  • 1970-01-01
  • 2020-08-06
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多