您好,我正在尝试在主机和容器之间共享数据,为此,我拥有以下Dockerfile和docker-compose.yml:
Docker文件
FROM python:3.8.7-buster
RUN mkdir /proxies
COPY proxies /proxies
RUN pwd
RUN ls -la /proxies
docker-compose.yml
version: '3'
services:
socks_provider:
build: SocksProvider
volumes:
- ${HOST_PATH}/proxies:/proxies
当pwd
并且ls
运行以显示正确的输出时,容器中的文件位于中/proxies
,但是当尝试使用主机中的volume文件夹访问该文件时,没有文件,但是创建了该文件夹。
如何在容器和主机之间共享该文件?
volumes: ['${HOST_PATH}/proxies:/proxies']
您的docker-compose.yml规范的字段会创建一个所谓的bind-mount。正如我在评论中提到的那样,此功能无法自动将现有文件从映像“导出”到主机。有关详细信息,这在另一个SO回答“ Docker:绑定安装的奇怪行为”中有很好的解释。
因此,要实现所需的功能,我想您需要使用单独的文件夹创建绑定安装,并依赖一些入口点代码。概念验证(待完善):
入口点
#!/bin/sh
if [ -d "/export" ]; then
( set -x; cp -a -T -- /proxies /export )
else
echo >&2 "Skipping copy to /export: No such directory"
fi
exec "$@"
Docker文件
FROM python:3.8.7-buster
# RUN mkdir /proxies # unneeded: the COPY command will create it
COPY proxies /proxies
WORKDIR /app
COPY entrypoint.sh /app/
RUN chmod a+x entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["/bin/sh"]
docker-compose.yml
version: '3'
services:
socks_provider:
build: SocksProvider
volumes:
- ${HOST_PATH}/proxies:/export
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句