Docker-compose创建目录而非文件

11
我正试图使用一些 Docker容器和docker-compose 来设置我的家庭服务器 (Ubuntu 18.04 LTS)。 在尝试设置 "transmission-rss" 时,出现以下错误:
/usr/local/lib/ruby/2.6.0/psych.rb:577:in `initialize': Is a directory @ io_fillbuf - fd:5 /etc/transmission-rss.conf (Errno::EISDIR)

当我去检查是否已创建了transmission-rss.conf文件时,实际上创建了一个同名的目录。

我需要使用sudo运行docker-compose up命令,所以我不知道这是否与权限有关。

以下是我的当前docker-compose.yml文件:

version: '3'
services:
  portainer:
    container_name: portainer
    image: portainer/portainer
    volumes:
      - '/home/miguel/docker/portainer/data/:/data'
      - '/home/miguel/docker/portainer/socket/:/var/run/docker.sock'
    ports:
      - "9000:9000"
    restart: always
  transmission-rss:
    container_name: transmission-rss
    image: nning2/transmission-rss:latest
    volumes:
      - '/home/miguel/docker/transmission-rss/transmission-rss.conf/:/etc/transmission-rss.conf/'
    restart: unless-stopped
< p > portainer 容器正常启动。

< p >非常感谢, 米格尔

2个回答

10

确保文件存在于两边(宿主机和容器内部)。

如果其中一个不存在,则Docker将创建目录而不是文件


这是正确的吗?如果主机文件存在,但容器文件不存在,则预期主机文件将作为文件挂载到目标位置。 - mikey
@mikey,请查看此答案:https://dev59.com/-1gQ5IYBdhLWcg3wxGvs#66327349 - TheEhsanSarshar

5

- '/home/miguel/docker/transmission-rss/transmission-rss.conf/:/etc/transmission-rss.conf/'

请移除结尾处的斜杠(有两个),并确保主机源中的transmission-rss.conf是一个文件,而不是目录。 稍微详细一些:
  1. 按照这里的说明避免使用sudo和docker-compose一起使用:https://docs.docker.com/install/linux/linux-postinstall这不是你问题的原因,但是每次都需要在命令前加sudo很麻烦,基本上只需要将您的用户添加到docker组即可)。
  2. 更新docker-compose.yml,从源和目标中删除transmission-rss.conf的尾部斜杠。
  3. 备份数据后,删除现有卷(docker volume ls+docker volume rm volume_name),如果需要的话。
  4. 主机上(您运行docker-compose命令的计算机),确保该文件存在,并且不是目录
  5. docker-compose down
  6. docker-compose build
  7. docker-compose up

2
只是补充一下;特别是“确保文件存在”的部分,要仔细检查本地(主机)路径是否正确。有时候即使是最好的人也会出现打字错误、额外的子文件夹等问题。 - J. Scott Elblein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接