sed: não é possível renomear ./sed6x9apB: operação não permitida usando o docker-compose com imagem do WordPress

0

O contêiner do WordPress falha ao iniciar ao usar o docker-compose, onde existem arquivos do WordPress existentes, abortando com o seguinte erro:

sed: cannot rename ./sedtpghTB: Operation not permitted

O erro ocorre apenas quando os arquivos do WordPress são hospedados em uma pasta compartilhada do VirtualBox (vboxsf). Compartilhar a pasta pelo SMB / CIFS evita o erro.

Configuração:

  • Anfitrião: Ganhe 10 (64b)
  • Convidado: 3.16.0-4-amd64 (debian_version 8.6) Versão de convidado / Vbox: 5.1.12 r112440 (Qt5.6.2)
  • Os arquivos do WordPress são compartilhados usando uma pasta compartilhada do VirtualBox montada em /media/vmhost

Aqui está a saída da configuração do 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: {}

Quando eu tento um sed no compartilhamento vboxsf, recebo um erro semelhante, mas apenas quando o arquivo de origem é somente leitura.

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

erro:

sed: cannot rename ./sed6x9apB: Operation not permitted

saída de montagem | grep www

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

Quando eu uso um compartilhamento CIFS, montado em / media / vmhost / www2, tudo funciona bem.

//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)
    
por AndrewD 17.01.2017 / 04:08

1 resposta

0

Isto parece ser um bug com o VirtualBox, veja Bilhete # 4890 .

Resposta de Frank:

fixed for Linux hosts but not for Windows hosts. In contrast to Linux where a file can be removed if the directory is writable but the file itself is read-only, a read-only file cannot be removed on Windows

Isso afeta o sed, já que o sed faz uma cópia do arquivo de origem (neste caso wp-config-sample.php) para um arquivo temporário e, em seguida, tenta fazer as substituições que o Windows não suporta, pois a cópia também é readonly.

Por algum motivo, um compartilhamento adequado usando CIFs não é afetado.

Solução alternativa 1: Torne o arquivo de origem gravável e reinicie o contêiner.

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

Solução alternativa 2: usar um compartilhamento CIFS.

  1. Na sua máquina Windows, compartilhe o diretório que contém seus arquivos do WordPress usando as propriedades de compartilhamento do Windows Advanced do diretório.
  2. Na sua VM do VirtualBox, adicione o seguinte ao / 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

    mount -a

por 17.01.2017 / 04:08