Docker Toolbox Windows - 无效的卷规范

时间:2017-01-11 22:43:31

标签: docker-compose

编辑:问题是COMPOSE_CONVERT_WINDOWS_PATHS环境变量未设置。我尝试将其添加到Dockerfile.env文件中但未设置。我无法设置任何新的环境变量。就像它从缓存的Dockerfile构建它一样。

删除容器后我正在运行docker-composer up,但这并没有重新创建新容器,即使添加--force-recreate,它也会从旧的Dockerfile创建容器。所以我改为运行docker build ./,它构建了一个新的容器,它重新安装了所有的包,并且说它设置了新的环境变量,但是在完成的容器中,当我检查运动时,我看到了新的环境变量未设置。但是我第一次构建容器时设置的所有旧环境变量都已设置完毕。我不知道为什么会这样,为什么我不能从更新的Dockerfile创建一个新的容器。

我发现了许多关于此错误的线程,当尝试在Windows docker-tools中安装卷时会发生这种情况。当我运行docker-compose up时,我收到此错误:

ERROR: for web  Cannot create container for service web: Invalid bind mount spec "C:\\path\\to\\project:/app:rw": Invalid volume specification: 'C:\path\to\project:/app:rw'
[31mERROR[0m: Encountered errors while bringing up the project.

docker-compose文件中我有这个:

    volumes:
        - ./:/app

我尝试设置此环境变量:

COMPOSE_CONVERT_WINDOWS_PATHS=1

为1,因为这对另一个线程中的某些人起作用,但在这种情况下它不起作用。我尝试在linux中添加一个绝对路径,如格式:

    volumes:
        - /c/path/to/project:/app

我收到此错误:

ERROR: for web  Cannot create container for service web: create \c\path\to\project: "\\c\\path\\to\\project" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed

注意它反转了正斜杠。改变:

ENV COMPOSE_CONVERT_WINDOWS_PATHS=0

到0就像没有改变任何东西。

如果我给出Windows格式的绝对目录,我会再次收到第一个错误。这两个错误,如果我指向一个不存在的目录,我会得到它们。

这里有没有人找到解决这个问题的方法?

3 个答案:

答案 0 :(得分:2)

因此,如果存在此问题,您应该创建名为COMPOSE_CONVERT_WINDOWS_PATHS的新Windows环境变量并将其设置为1.或者您可以在路径docker-compose.yml中创建.env文件,其中包含以下内容:

 COMPOSE_CONVERT_WINDOWS_PATHS=1

...

cat >.env
COMPOSE_CONVERT_WINDOWS_PATHS=1

答案 1 :(得分:1)

看起来您的COMPOSE_CONVERT_WINDOWS_PATHS=1环境变量未被docker cli(powershell)读取。您可以尝试从powershell控制台运行Get-ChildItem Env:命令,以获取已在powershell控制台中设置的环境变量列表。输出如下:

Name                           Value
----                           -----
COMPOSE_CONVERT_WINDOWS_PATHS  1
COMSPEC                        C:\WINDOWS\system32\cmd.exe
DOCKER_CERT_PATH               C:\Users\devsa\.docker\machine\machines\default
DOCKER_HOST                    tcp://192.168.99.100:2376
DOCKER_TLS_VERIFY              1
...

如果您未在PowerShell控制台中看到COMPOSE_CONVERT_WINDOWS_PATHS=1变量,则表示该变量尚未设置。要通过powershell控制台设置环境变量,请尝试以下命令:

$env:COMPOSE_CONVERT_WINDOWS_PATHS=1

它将在电源外壳控制台check this powershell documentation中设置环境变量。尝试再次运行Get-ChildItem Env:命令以检查变量是否已设置。如果已设置变量,则可以尝试再次运行docker-compose up -d

答案 2 :(得分:0)

将环境变量设置为COMPOSE_CONVERT_WINDOWS_PATHS = 1后,尝试使用docker-compose中的设置

with temp(str,nr) as
 (select 'abc' str,123456789 nr
    from dual
  union
  select '123abc$',12345678
    from dual
  union
  select '1abc3#' ,1234567
    from dual
  union
  select 'abc3'   ,123456
    from dual
  union
  select 'ab3c'   ,12345 
    from dual)
select case when ( t.str = regexp_substr(str,'[a-zA-Z]+') and length(nr)=9 ) then 'True' 
            else 'False' 
        end result,
       str, nr 
  from temp t
 order by length(nr) desc;

RESULT  STR        NR
------  -------    ---------
True    abc        123456789
False   123abc$    12345678
False   1abc3#     1234567
False   abc3       123456
False   ab3c       12345

它对我有用