docker-compose 创建目录而不是文件

问题描述 投票:0回答:3

我正在尝试使用一些 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
文件是否已创建时,在其位置创建了一个同名的目录。

我必须使用

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

这是我当前的 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

portainer
容器开始正常。

非常感谢, 米格尔

docker docker-compose ubuntu-18.04
3个回答
13
投票

确保两侧(主机内部和容器内部)都存在文件

如果其中之一不存在则docker创建一个目录而不是文件


6
投票

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

请删除尾部斜杠(有 2 个!)并确保

transmission-rss.conf
file,而不是主机源上的 dir

更全面一点:

  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

0
投票

在撰写本文时(Docker v4.34.3)如果运行 Docker 的主机上不存在该文件,则会创建一个目录。

运行之前必须确保该文件存在于本地

docker compose up
。或者编写一个脚本以确保该文件存在,然后启动您的环境:

echo "" >> /home/miguel/docker/transmission-rss/transmission-rss.conf
docker compose up

注意:这应该适用于 Linux/Mac/Windows Powershell。

您还应该修改 compose.yml 文件以删除尾部斜杠。

# version: '3' this is no longer needed today.

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
© www.soinside.com 2019 - 2024. All rights reserved.