我们有开发人员使用Windows和Linux开发应用程序。该应用程序构建在Docker容器中,并为构建环境提供了docker-compose规范。

本地目录作为卷安装:

    volumes:
      - ${PWD}:/tmp


但是,由于未定义$PWD,因此在Windows中不起作用。

我的问题是:

我们可以用一个docker-compose.yml来满足Windows和Linux开发人员的需求吗?

执行此操作的明显方法似乎我有两个docker-compose文件,每个操作系统一个。

#1 楼

是。只需对Docker-compose文件所在的当前目录使用./即可。Docker-Compose不允许您使用位于compose文件上方的上下文,因此compose文件将使用的所有内容都位于带有。的文件夹下方。 yml。您用于撰写文件的“工作目录”仅为“ ./”。如果要在下面设置目录,则该目录应类似于:
volumes:
  - ./DirectoryIWantToTarget:/tmp


此处的Docker-Compose文档中有一个示例。这种方法也使解决方案跨平台。

#2 楼

PS C:\Users\gaius> Write-Output $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      17763  592     



PS C:\Users\gaius> Write-Output $pwd

Path          
----          
C:\Users\gaius


似乎按预期工作,您正在使用什么版本的东西?

与Linux相比:

gaius@klossy:~$ pwsh
PowerShell 6.2.2
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

PS /home/gaius> echo $pwd

Path
----
/home/gaius

PS /home/gaius> 


echo只是Write-Output的别名)

如果您必须在Windows和Linux之间具有确切的通用性,则可以使用一些解决方案,例如Git随Windows一起提供的Bash,WSL等。

评论


这个答案使我看起来像个白痴:) -并且肯定显示了我在PowerShell方面的知识空白。开发人员声称$ {PWD}不适用于他们。不幸的是,我无法验证这一点,无法访问Windows计算机。但是肯定看起来应该可以工作(我在Linux上使用Powershell 6.2.2)

–布鲁斯·贝克尔(Bruce Becker)
19年8月26日在18:00

@BruceBecker将Linux添加到我的答案中

– Gaius
19年8月26日在18:36

实际上,现在我想一想,如果您的Windows开发人员绝对必须采取与Linux相同的操作方式,则建议他们使用Git Bash。

– Gaius
19年8月26日在18:42

#3 楼

我认为我的情况可能与我的情况有关,因为我也尝试为Windows和Linux配置环境。我只需要提到我在以下配置的WSL1(Linux的Windows子系统)上使用docker-compose

我建议您尝试

我的解决方案是:官方文档中的长语法卷定义):

version: '3.7'

services:
  web:
    build: ./DirectoryWithDockerfile
    volumes:
      - type: bind
        source: ./DirectoryIWantToMountInDockerContainer
        target: /path/where/mount/source
        volume:
          nocopy: true  # flag to disable copying of data from a container when a volume is created
    ports:
      - 8000:8000


我不知道为什么短语法在Windows上对我(以及您)不起作用:

   volumes:  # this doesn't work and I don't know why
     - ./DirectoryIWantToMountInDockerContainer/:/path/where/mount/source


我的Docker版本:19.03.5

docker-compose版本:1.25.4

#4 楼

volumes:
  - /usr/local/db-backup:/var/lib/mysql # On Linux, For backup data from the docker container to the host
  - D:/Docker_volumes/mysql/db-backup:/var/lib/mysql # On Windows, you need to config File Sharing with "D:" mounted when starting docker.


评论


欢迎使用DevOps。感谢您的贡献。您已经展示了如何在每个Linux和Windows上执行卷操作,但没有显示OP如何具有一个可同时用于两者的docker-compose.yml。

–小鸡
20年4月13日在2:41