本地目录作为卷安装:
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等。
#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
评论
这个答案使我看起来像个白痴:) -并且肯定显示了我在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