docs/machine/reference/scp.md

72 lines
2.2 KiB
Markdown

---
description: Copy files among machines
keywords: machine, scp, subcommand
title: docker-machine scp
---
Copy files from your local host to a machine, from machine to machine, or from a
machine to your local host using `scp`.
The notation is `machinename:/path/to/files` for the arguments; in the host
machine's case, you don't have to specify the name, just the path.
## Example
Consider the following example:
```none
$ cat foo.txt
cat: foo.txt: No such file or directory
$ docker-machine ssh dev pwd
/home/docker
$ docker-machine ssh dev 'echo A file created remotely! >foo.txt'
$ docker-machine scp dev:/home/docker/foo.txt .
foo.txt 100% 28 0.0KB/s 00:00
$ cat foo.txt
A file created remotely!
```
Just like how `scp` has a `-r` flag for copying files recursively,
`docker-machine` has a `-r` flag for this feature.
In the case of transferring files from machine to machine,
they go through the local host's filesystem first (using `scp`'s `-3` flag).
## Specifying file paths for remote deployments
When you copy files to a remote server with `docker-machine scp` for app
deployment, make sure `docker-compose` and the Docker daemon know how to find
them. You can specify absolute paths, e.g. `/home/myuser/workspace` in a
[Compose file](/compose/compose-file/index.md), which will be mounted into the
container at `/workspace`, from the absolute path on the remote host where the
Docker daemon is running. Local client paths (e.g., on your laptop) will not
work for daemons running on a remote machine, so avoid using relative paths.
For example, imagine you want to transfer your local directory
`/Users/londoncalling/webapp` to a remote machine and bind mount it into a
container on the remote host. (We'll suppose the remote user is `ubuntu`.) You
could do something like this:
```none
$ docker-machine scp -r /Users/londoncalling/webapp MACHINE-NAME:/home/ubuntu/webapp
```
Then write a docker-compose file that bind mounts it in:
```none
version: "3.1"
services:
webapp:
image: alpine
command: cat /app/root.php
volumes:
- "/home/ubuntu/webapp:/app"
```
And we can try it out like so:
```none
$ eval $(docker-machine env MACHINE-NAME)
$ docker-compose run webapp
```