znat
znat

Reputation: 13474

Docker how to pass a relative path as an argument

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

Answers (3)

Victor Zakharov
Victor Zakharov

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

Baker
Baker

Reputation: 28010

Windows - Powershell

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

larsks
larsks

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

Related Questions