我是码头工人的新手。我正在学习一个教程,其中我使用了绑定挂载和卷,我使用的是windows 10 Docker快速启动终端(bash)和Docker 19.03.1。
我在目录.../dockerfile-sample-2 (Note:此路径包含空格)中,包含:
$ ls -al
total 18
drwxr-xr-x 1 Tommaso 197121 0 mag 10 11:55 ./
drwxr-xr-x 1 Tommaso 197121 0 mag 1 19:20 ../
-rw-r--r-- 1 Tommaso 197121 410 apr 11 09:06 Dockerfile
-rw-r--r-- 1 Tommaso 197121 249 apr 11 09:06 index.html
-rw-r--r-- 1 Tommaso 197121 0 mag 10 11:55 testme.txt现在我跑着,得到了以下信息:
.../dockerfile-sample-2
$ docker container run -d --name nginx -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
b8f24ee0e0b76d0b06503ce90fbd6a9e2110e40eaa4432e8c77556510c61a989
.../dockerfile-sample-2
$ docker container run -d --name nginx2 -p 8080:80 nginx
3450433e18097291936d7e62071769521eb36e92f509ad931c9e927f135df71a现在,根据本教程,通过访问IP地址http://192.168.99.101/和http://192.168.99.101:8080,我应该能够分别看到来自index.html文件和原始nginx登陆页面的自定义登陆页面。
然而,我只得到了最初的nginx登陆页两次。
更多,根据我的教程,通过运行
docker container exec -it nginx bash
cd /usr/share/nginx/html
ls –al我应该获得上一个目录.../dockerfile-sample-2的相同内容。
然而,我只得到
root@b8f24ee0e0b7:/usr/share/nginx/html# ls -al
total 16
drwxr-xr-x 2 root root 4096 Apr 13 19:20 .
drwxr-xr-x 3 root root 4096 Apr 13 19:20 ..
-rw-r--r-- 1 root root 494 Apr 13 15:13 50x.html
-rw-r--r-- 1 root root 612 Apr 13 15:13 index.html而且,根据我的教程,如果我要在我的.../dockerfile-sample-2目录中创建一个新文件,它应该出现在
docker container exec -it nginx bash
cd /usr/share/nginx/html
ls –al但事实并非如此。
我做错了什么?
在这里,您有一些上下文:
我的运行容器
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3450433e1809 nginx "/docker-entrypoint.…" 20 minutes ago Up 20 minutes 0.0.0.0:8080->80/tcp nginx2
b8f24ee0e0b7 nginx "/docker-entrypoint.…" 21 minutes ago Up 21 minutes 0.0.0.0:80->80/tcp nginx在我的文档中:
# this shows how we can extend/change an existing official image from Docker Hub
FROM nginx:latest
# highly recommend you always pin versions for anything beyond dev/learn
WORKDIR /usr/share/nginx/html
# change working directory to root of nginx webhost
# using WORKDIR is preferred to using 'RUN cd /some/path'
COPY index.html index.html
# I don't have to specify EXPOSE or CMD because they're in my FROM在我的Index.html里
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Your 2nd Dockerfile worked!</title>
</head>
<body>
<h1>You just successfully ran a container with a custom file copied into the image at build time!</h1>
</body>
</html>更新:
我敢打赌,这个问题与当前工作目录包含空格的事实有关。
所以我删除了nginx容器,试着运行其他容器。
以下命令:
docker container run -d --name nginx -p 80:80 -v "$(pwd)":/usr/share/nginx/html nginx
docker container run -d --name nginx -p 80:80 -v "/d/Files Tommaso/Programmazione/Docker/udemy-docker-mastery-main/dockerfile-sample-2:/usr/share/nginx/html" nginx
docker container run -d --name nginx -p 80:80 -v "/d/Files Tommaso/Programmazione/Docker/udemy-docker-mastery-main/dockerfile-sample-2":/usr/share/nginx/html nginx当我试图访问http://192.168.99.101/时,让我的浏览器获得403禁忌。
而这些其他命令:
docker container run -d --name nginx -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
docker container run -d --name nginx -p 80:80 -v /$(pwd):/usr/share/nginx/html nginx
docker container run -d --name nginx -p 80:80 -v `pwd -W`:/usr/share/nginx/html nginx
docker container run -d --name nginx -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
docker container run -d --name nginx -p 80:80 -v /d/Files Tommaso/Programmazione/Docker/udemy-docker-mastery-main/dockerfile-sample-2:/usr/share/nginx/html nginx让我的终端回复:
C:\Applicazioni_Tommaso\Docker Toolbox\docker.exe: invalid reference format: repository name must be lowercase.
See 'C:\Applicazioni_Tommaso\Docker Toolbox\docker.exe run --help'.我打赌这意味着它不能解析空间。
还有其他命令:
docker container run -d --name nginx -p 80:80 -v %cd%:/usr/share/nginx/html nginx让我的终端回复:
C:\Applicazioni_Tommaso\Docker Toolbox\docker.exe: Error response from daemon: create YYYY: "YYYY" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.发布于 2021-05-11 15:07:10
经过几次尝试,我可以假设
Docker 19.03.1无法管理<path containing spaces>在-v参数中的使用
docker container run -d --name <name> -p 80:80 -v <path containing spaces>:<destination path> <image>解决此问题的唯一方法是将源卷目录更改为不包含空格的目录,并运行
docker container run -d --name nginx -p 80:80 -v $(pwd):/usr/share/nginx/html nginx发布于 2022-08-28 20:09:52
使用--mount可以解决这个问题
docker container run -d --name nginx -p 80:80 --mount type=bind,source="$(pwd)",destination=/usr/share/nginx/html nginx
发布于 2022-02-03 12:23:48
在使用directory:volume绑定-v时,我遇到了几乎相同的问题(给定目录中间隔导致问题的假设)。
上下文:
运行aws函数部署包,使用lambci/lambda:build-python3.8映像构建任务容器,使用windowspath\build中的文件。
下面的命令对我有效,因为windowspath\build中的文件被识别并用于下面的/bin/sh -c命令;因此,绑定到/var/task是按预期工作的。
注:后的-v标志,双引号只适用于源目录(窗式色漆,据说也适用于unix样式),在冒号之前结束双引号,在冒号后面引用的目录/var/task是停靠运行环境目录(unix /WSL后端)。
docker run -v "C:\windowspath\build":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t package/;cd package;zip -r ../deployment_package.zip .;zip -g ../deployment_package.zip ../lambda_function.py"https://stackoverflow.com/questions/67473985
复制相似问题