Как смонтировать один файл с помощью `docker run`?

#docker #nginx

#docker #nginx

Вопрос:

В docker-compose это работает нормально:

   nginx:
    image: nginx:latest
    network_mode: host
    volumes:
      - web_server/local-nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 8080:8080
  

Однако, если я попытаюсь сделать то же самое, используя docker run напрямую:

 $ docker run --network host -p 8080:8080 
  -v "web_server/local-nginx.conf:/etc/nginx/nginx.conf" 
  nginx:latest
  

Я получаю ошибки:

 docker: Error response from daemon: create web_server/local-nginx.conf: "web_server/local-nginx.conf"
includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. 
If you intended to pass a host directory, use absolute path.
  

Я также пробовал использовать --mount , с теми же результатами:

 $ docker run -p 8080:8080 --network host 
  --mount src="web_server/local-nginx.conf",dst="/etc/nginx/nginx.conf" 
  nginx:latest
  

Комментарии:

1. Это может быть закрыто, поскольку это было вызвано опечаткой (при попытке указать абсолютный путь, как предполагала ошибка).

Ответ №1:

В левой части docker run -v параметра должно быть имя тома или абсолютный путь. Docker Compose понимает относительные пути в volumes: , а обычный Docker — нет.

Вам нужно включить имя текущего каталога в параметр. Использование $PWD переменной окружения для этого является обычным:

 docker run ... 
  -v "$PWD/web_server/local-nginx.conf:/etc/nginx/nginx.conf" 
  ...
  

Комментарии:

1. Что ж.. Я думал, что пробовал это — поскольку это то, о чем говорится в ошибке, но, должно быть, я допустил опечатку.