docker run中使用‘./‘相对路径挂载文件或目录失败的解决办法

docker-compose.yml文件中允许使用’./'相对路径

version: '3'
	...
	volumes:
		- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
		- ./mongo-volume:/data/db
	...
  1. 会将当前路径下的init-mongo.js文件挂载到容器中的/docker-entrypoint-initdb.d/init-mongo.js,并且设置为只读方式;
  2. 会将当前路径下的mongo-volume目录挂载到容器中/data/db,如果不存在mongo-volume,则会自动创建该目录

但如果是docker run的方式就不能像上面一样用相对路径了

>>> docker run -d --restart always -p 27017-27019:27017-27019 -e MONGO_INITDB_DATABASE=job -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -v $PWD/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro -v ./mongo-volume:/data/db --name my-mongo-container mongo
docker: Error response from daemon: create ./init-mongo.js: "./init-mongo.js" 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.
See 'docker run --help'.

需要用到$PWD替代点号’.'

>>> docker run -d --restart always -p 27017-27019:27017-27019 -e MONGO_INITDB_DATABASE=job -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -v $PWD/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro -v $PWD/mongo-volume:/data/db --name my-mongo-container mongo
3081e25a20fa8b2e95850897b3b32b08da298f73d7e458119fa3f2c85b45f020

参考:
https://stackoverflow.com/a/51312525/7151777
https://github.com/moby/moby/issues/4830#issuecomment-404178438

使用`docker run`启动 Nginx 容器时出现`/docker-entrypoint.sh: 47: exec: nginx: not found`错误,可能由多种原因导致,以下是一些解决办法: #### 1. 检查 Nginx 是否正确安装 如果在构建镜像时 Nginx 安装失败,会出现找不到`nginx`命令的情况。可以进入容器内部检查 Nginx 是否存在。 ```bash docker exec -it <容器ID名称> bash which nginx ``` 若未找到,需要在 Dockerfile 中正确安装 Nginx。以基于 Debian 系统为例: ```Dockerfile FROM debian:buster RUN apt-get update && apt-get install -y nginx CMD ["nginx", "-g", "daemon off;"] ``` #### 2. 检查脚本权限 `docker-entrypoint.sh`脚本权限不足可能导致执行异常。可在构建镜像时添加执行权限: ```Dockerfile RUN chmod +x /docker-entrypoint.sh ``` #### 3. 检查挂载目录 挂载目录可能覆盖了容器内的关键文件,导致`nginx`命令找不到。检查`docker run`命令中的挂载参数,确认没有覆盖`nginx`可执行文件所在目录。 ```bash docker run -d -p 80:80 --name nginx \ -v /home/docker/nginx/sbin:/sbin \ -v /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /home/docker/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /home/docker/nginx/html:/usr/share/nginx/html \ -v /home/docker/nginx/log:/var/log/nginx \ docker.io/nginx:latest ``` 确保挂载目录不会影响`nginx`命令的执行。 #### 4. 检查环境变量 环境变量可能影响命令的查找路径。可以在容器内部查看`PATH`环境变量: ```bash docker exec -it <容器ID名称> bash echo $PATH ``` 确保`nginx`可执行文件所在目录在`PATH`中。 #### 5. 检查参数顺序 参数顺序可能影响命令的执行。可尝试调整`docker run`命令参数顺序,把`-d`参数放在末尾: ```bash docker run --name nginx -p 80:80 -v /home/docker/nginx/sbin:/sbin -v /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/docker/nginx/html:/usr/share/nginx/html -v /home/docker/nginx/log:/var/log/nginx docker.io/nginx:latest -d ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值