Reputation: 13474
I would like to run this command:
docker run docker-mup deploy --config .deploy/mup.js
where docker-mup
is the name the image, and deploy
, --config
, .deploy/mup.js
are arguments
My question: how to mount a volume such that .deploy/mup.js
is understood as the relative path on the host from where the docker run
command is run?
I tried different things with VOLUME
but it seems that VOLUME does the contrary: it exposes a container directory to the host.
I can't use -v because this container will be used as a build step in a CI/CD pipeline and as I understand it, it is just run as is.
Upvotes: 37
Views: 49404
Reputation: 26424
In my case there was no need for $pwd
, and using the standard current folder notation .
was enough. For reference, I used docker-compose.yml
and ran docker-compose up
.
Here is a relevant part of docker-compose.yml
.
volumes:
- '.\logs\:/data'
Upvotes: 0
Reputation: 28010
If you're inside the directory you want to bind mount, use ${pwd}
:
docker run -it --rm -d -p 8080:80 --name web -v ${pwd}:/usr/share/nginx/html nginx
or $pwd/.
(forward slash dot):
docker run -it --rm -d -p 8080:80 --name web -v $pwd/.:/usr/share/nginx/html nginx
Just $pwd
will cause an error:
docker run -it --rm -d -p 8080:80 --name web -v $pwd:/usr/share/nginx/html nginx
Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to
delimit the name
Mounting a subdirectory underneath your current location, e.g. "site-content
", $pwd/
+ subdir
is fine:
docker run -it --rm -d -p 8080:80 --name web -v $pwd/site-content:/usr/share/nginx/html nginx
Upvotes: 12
Reputation: 311606
I can't use -v because this container will be used as a build step in a CI/CD pipeline and as I understand it, it is just run as is.
Using -v
to expose your current directory is the only way to make that .deploy/mup.js
file inside your container, unless you are baking it into the image itself using a COPY
directive in your Dockerfile
.
Using the -v
option to map a host directory might look something like this:
docker run \
-v $PWD/.deploy:/data/.deploy \
-w /data \
docker-mup deploy --config .deploy/mup.js
This would map (using -v ...
) the $PWD/.deploy
directory onto /data/.deploy
in your container, set the current working directory to /data
(using -w ...
), and then run deploy --config .deploy/mup.js
.
Upvotes: 48