sed:无法重命名 ./sed6x9apB:不允许使用 docker-compose 和 WordPress 映像执行操作

sed:无法重命名 ./sed6x9apB:不允许使用 docker-compose 和 WordPress 映像执行操作

使用 docker-compose 时,WordPress 容器启动失败,其中存在现有的 WordPress 文件,并中止并出现以下错误:

sed: cannot rename ./sedtpghTB: Operation not permitted

仅当 WordPress 文件托管在 VirtualBox (vboxsf) 共享文件夹中时才会发生错误。通过 SMB/CIFS 共享文件夹可避免该错误。

设置:

  • 主机:Win 10(64b)
  • 客户机:3.16.0-4-amd64(debian_version 8.6)客户机/Vbox 版本:5.1.12 r112440(Qt5.6.2)
  • WordPress 文件使用安装在以下位置的 VirtualBox 共享文件夹进行共享/media/vmhost

以下是 docker-compose 配置的输出:

        networks: {}
        services:
          db:
            environment:
              MYSQL_DATABASE: my_db_name
              MYSQL_PASSWORD: 'MY_ROOT_PASSWORD'
              MYSQL_ROOT_PASSWORD: 'MY_ROOT_PASSWORD'
              MYSQL_USER: root
            image: mysql:5.7
            ports:
            - 3306:3306
            restart: never
            volumes:
            - db_data:/var/lib/mysql:rw
          wordpress:
            depends_on:
            - db
            environment:
              WORDPRESS_DB_HOST: db:3306
              WORDPRESS_DB_NAME: my_db_name
              WORDPRESS_DB_PASSWORD: 'MY_PASSWORD'
              WORDPRESS_DB_USER: root
            image: wordpress:latest
            ports:
            - 80:80
            restart: never
            volumes:
            - /media/vmhost/www/test:/var/www:rw
            - /media/vmhost/www/test/public_html:/var/www/html:rw
        version: '2.0'
        volumes:
          db_data: {}
          wp_data: {}

当我尝试在 vboxsf 共享上使用 sed 时,出现了类似的错误,但仅当源文件是只读时才会出现。

echo 'hello' > hello.txt
chmod a-w hello.txt
sed -i  's/hello/goodbye/' hello.txt

错误:

sed: cannot rename ./sed6x9apB: Operation not permitted

mount | grep www 的输出

    www on /media/vmhost/www type vboxsf (rw,nodev,relatime)

当我使用安装在 /media/vmhost/www2 的 CIFS 共享时,一切正常。

//my_laptop/www on /media/vmhost/www2 type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=vboxsf,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.1.5,file_mode=0777,dir_mode=0777,nounix,serverino,noperm,rsize=61440,wsize=65536,actimeo=1)

答案1

这似乎是 VirtualBox 的一个错误,请参阅票号 #4890

根据弗兰克的回复:

Linux 主机已修复,但 Windows 主机尚未修复。Linux 中,如果目录可写但文件本身是只读的,则可以删除文件,而 Windows 上则无法删除只读文件

这会影响 sed,因为 sed 将源文件(在本例中为 wp-config-sample.php )复制到临时文件,然后尝试进行替换,但由于该副本也是只读的,因此 Windows 不支持替换。

由于某种原因,使用 CIF 的正确共享不会受到影响。

解决方法 1:使源文件可写并重新启动容器。

chmod a+w wp-config-sample.php docker-compose up

解决方法 2:使用 CIFS 共享。

  1. 在 Windows 机器上,使用目录的 Windows 高级共享属性共享包含 WordPress 文件的目录。
  2. 在 VirtualBox VM 上,将以下内容添加到 /etc/fstab

    //my_laptop/www  /media/vmhost/www  cifs  username=WINDOWS_USER,password=WINDOWS_USER_PASSWORD,file_mode=0777,dir_mode=0777,iocharset=utf8,noperm,sec=ntlm  0  0
    
  3. mount -a

相关内容