[root @ mymachine redisc] #ls app.py Dockerfile redis.conf redis-server requirements.txt
[root @ mymachine redisc] #cat Dockerfile
# Use an official Python runtime as a parent image
FROM python:2.7-slim
#FROM alpine:3.7
# Define mountable directories.
VOLUME ["/x/build/"]
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Make port 80 available to the world outside this container
EXPOSE 6379
# Define environment variable
ENV NAME Redis
# Run app.py when the container launches
CMD ["/app/redis-server", "/app/redis_rtp.conf"]
我将图像构建为myredis
[root@mymachine redisc]# docker run -p 6379:6379
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 104
>>> 'logfile /x/build/redis/logs/redis_6379_container.log'
Can't open the log file: No such file or directory
上面给了我一个错误,所以我尝试提供路径
[root@mymachine redisc]# docker run -p 6379:6379 -v /x/build/redis/log myredis
它给了我同样的错误但是dir存在。
[root@mymachine9 redisc]# ls /x/build/redis/logs/
redis2_6379.log redis_6379.log
为什么不能从容器中访问目录?我该如何解决?
谢谢
答案 0 :(得分:0)
VOLUME ["/x/build/"]
表示您要将容器的/x/build/
目录挂载到主机操作系统。
相反,我认为您希望容器将主机操作系统的/x/build/
安装到容器中。
这就是为什么我要求[root@mymachine9 redisc]# ls /x/build/redis/logs/
在容器或主机操作系统中,这就是为什么docker会返回错误No such file or directory
。
因为docker只有空/x/build/
目录。
(如果基本图像没有/x/build/
,则docker将创建dir)
例如,
# Add into you Dockferfile
RUN mkdir -p /testDir && touch /testDir/test && echo "test1234" >> /testDir/test
VOLUME ["/testDir"]
---------
# Run a container
$ docker run --name test image_name
# Check mount position
$ docker inspect test -f {{.Mounts}}
[{volume 09e3cedef5ceeef0cbd944785e0ea629d4c65a20b10d1384bbd50a1c67879845 /var/lib/docker/volumes/09e3cedef5ceeef0cbd944785e0ea629d4c65a20b10d1384bbd50a1c67879845/_data /testDir local true }]
# Move to mount position
$ cd /var/lib/docker/volumes/09e3cedef5ceeef0cbd944785e0ea629d4c65a20b10d1384bbd50a1c67879845/_data
# Check if the content is from testDir of base image.
$ ls
test
$ cat test
test1234
作为@fernandezcuesta
评论,您可以使用bind选项。
-v /x/build/redis/logs:/x/build/redis/logs
or
--mount type=bind,source=/x/build/redis/logs,target=/x/build/redis/logs
- - - - 修改强> -----
目前,bind
无法在构建图片时执行Dockerfile
选项。请参阅此issue,您可以找到docker不支持的原因。
简而言之
绑定挂载链接到主机,因为Dockerfiles可以共享,它会破坏兼容性(带有绑定挂载的Dockerfile在我的机器上不起作用)
绑定挂载与运行更相关,而不是与构建相关。