Docker 无法使用卷共享日期

Docker 无法使用卷共享日期,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,您好,我正在尝试在主机和容器之间共享数据,为此,我有以下Dockerfile和docker-compose.yml: Dockerfile FROM python:3.8.7-buster RUN mkdir /proxies COPY proxies /proxies RUN pwd RUN ls -la /proxies FROM python:3.8.7-buster # RUN mkdir /proxies # unneeded: the COPY command will crea

您好,我正在尝试在主机和容器之间共享数据,为此,我有以下Dockerfile和docker-compose.yml:

Dockerfile

FROM python:3.8.7-buster
RUN mkdir /proxies
COPY proxies /proxies
RUN pwd
RUN ls -la /proxies
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:/proxies
当运行
pwd
ls
以显示正确的输出时,容器中的文件位于
/proxies
中,但当尝试使用主机中的卷文件夹访问该文件时,没有文件,但创建了文件夹


如何在容器和主机之间共享这些文件?

docker-compose.yml规范的
卷:['${host\u PATH}/proxies:/proxies']
字段创建了一个所谓的。正如我在评论中提到的,该功能无法自动将现有文件从图像“导出”到主机。有关详细信息,请参见

所以为了实现您想要的,我想您需要创建一个带有单独文件夹的绑定挂载,并依赖于一些入口点代码。概念证明(有待完善):

entrypoint.sh

#/垃圾箱/垃圾箱
如果[-d”/导出“];然后
(set-x;cp-a-T--/proxies/export)
其他的
echo>&2“跳过复制到/导出:没有这样的目录”
fi
执行官“$@”
Dockerfile

FROM python:3.8.7-buster
RUN mkdir /proxies
COPY proxies /proxies
RUN pwd
RUN ls -la /proxies
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:/proxies
版本:“3”
服务:
提供程序:
构建:SocksProvider
卷数:
-${HOST\u PATH}/代理:/export

主机路径的值是多少?这是否回答了您的问题?HOST_PATH是从.env获取的变量,由于文件夹正在创建,因此该变量正常工作ok@Tlaloc-ES如中所述,“您不能直接使用卷从映像中复制文件;您必须运行运行
cp
命令的容器。”顺便说一句,请注意,Dockerfile命令
VOLUME
在一般情况下肯定是不需要的,例如,请参阅另一个线程中@DavidMaze的回答:错误:for services\u socks\u provider\u 1无法启动service socks\u provider:OCI runtime create failed:container\u linux.go:349:启动容器进程导致“exec:\”/app/entrypoint.sh\“:权限被拒绝“:未知od点:a
chmod a+x
缺失indeed@Tlaloc-ES我现在已经测试过了,它似乎可以工作:
docker compose-up--build
yields
socks\u provider_1 |+cp-a-T--/proxies/export
可以工作,因为复制代码,但我希望主机和容器之间共享数据,以便在多台机器上运行docker时恢复数据。感谢您的工作和代码