docker-compose volumes Затирает копирование через COPY

Затирание происходит, только если копирование с помощью COPY выполняется в ту же папку, на которую потом после запуска будут применены volumes из docker-compose,
например, у вас тако Dockerfile:

WORKDIR "/var/www/html/site"
#......разные команды

WORKDIR "~"
COPY cmdrun.sh cmdrun.sh
RUN  chmod +x cmdrun.sh

CMD ./cmdrun.sh

И такой docker-compose:

version: '3.7'
services:
  web:
    build: ./
    container_name: other_doc_dir_full_1
    ports:
      - "29927:22"
    volumes:
      - '../:/var/www/html/site'
    networks:
        frontnet2:
            ipv4_address: 172.89.1.2   

-- при такой конфигурации CMD ./cmdrun.sh будет не найден и потому не запустится, проблема в том, что смена рабочей директории:

WORKDIR "~"

-- на самом деле будет воспринята как смена на адрес (как будто он относительный):

WORKDIR "/var/www/html/site/~"

Поэтому главная идея состоит в том, что если вы хотите копировать файлы в Dockerfile вы не должны потом на эти же папки применять команду volumes из docker-compose /

В данном случае возможным решением может служить использование для bash-скрипта отдельной директории, лежащей не внутри директории из volumes:

WORKDIR "/var/www/html/site"
#......разные команды

WORKDIR "/var/www/run"
COPY cmdrun.sh cmdrun.sh
RUN  chmod +x cmdrun.sh

CMD ./cmdrun.sh

На ту же тему - обсуждения и решения

О проблеме затирания https://stackoverflow.com/a/32785014