编辑:问题是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格式的绝对目录,我会再次收到第一个错误。这两个错误,如果我指向一个不存在的目录,我会得到它们。
这里有没有人找到解决这个问题的方法?
答案 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
它对我有用