Docker Compose中Hop容器目录挂载至Py_env容器失败求助
问题原因与解决方案:Docker Compose跨容器目录挂载
问题原因
你当前的volumes配置逻辑错误:
- 配置中的
- /opt/hop:/opt/hop3是将宿主机的/opt/hop目录挂载到py_env容器的/opt/hop3,而非挂载hop容器内部的/opt/hop目录。 - 而
- /bin:/test1能正常访问,是因为宿主机本身存在/bin目录,挂载后py_env容器直接读取了宿主机的/bin内容。 - hop容器的
/opt/hop是容器内部独立目录,默认无法被其他容器直接访问,必须通过共享卷机制实现跨容器数据共享。
解决方案
方法1:使用Named Volume(推荐,纯容器间共享)
定义一个命名卷,让hop容器将内部/opt/hop挂载到该卷,py_env容器再挂载同一个卷到自身目录,实现数据同步:
name: production services: hop: # ... 保留原有hop容器配置 volumes: - C:/data-pipelines:/files - hop_opt_volume:/opt/hop # 将hop的/opt/hop绑定到命名卷 ports: - 8080:8080 - 8180:8180 py_env: container_name: py_env hostname: py_env build: context: ./docker_python_server dockerfile: Dockerfile depends_on: - hop ports: - 5550:80 volumes: - hop_opt_volume:/opt/hop3 # 挂载同一个命名卷到py_env的/opt/hop3 # - /bin:/test1 # 不需要可删除,保留则继续挂载宿主机/bin # 声明命名卷 volumes: hop_opt_volume:
方法2:使用Bind Mount(需宿主机参与共享)
如果需要宿主机也能访问该目录,可指定宿主机一个本地目录作为中间层,同时挂载到两个容器:
name: production services: hop: # ... 保留原有hop容器配置 volumes: - C:/data-pipelines:/files - ./hop_opt:/opt/hop # 宿主机当前目录下的hop_opt挂载到hop的/opt/hop ports: - 8080:8080 - 8180:8180 py_env: # ... 保留原有py_env容器配置 volumes: - ./hop_opt:/opt/hop3 # 同一个宿主机目录挂载到py_env的/opt/hop3 # - /bin:/test1
注意:Windows环境下需确保宿主机目录路径正确(如使用
C:/path/to/hop_opt绝对路径),且目录已提前创建。
额外注意事项
depends_on仅保证hop容器先启动,但不保证其/opt/hop目录已生成内容。若hop容器启动后才初始化该目录文件,需在py_env容器中添加等待逻辑(如脚本检查文件存在),或确保hop容器启动时已完成目录初始化。- 可通过
docker exec -it hop ls /opt/hop命令进入hop容器,确认/opt/hop目录下确实存在文件。
内容的提问来源于stack exchange,提问作者Hans Geber
相关产品推荐
相关产品推荐

