Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

docker running a data container from scratch

Tags:

docker

I created a data only container containing static HTML files that are intended to be consumed by a nginx container. Goal is that my webapp is providing a volume that nginx can use.

For this reason I created a simple Dockerfile:

FROM scratch
MAINTAINER me <[email protected]>
ADD dist/ /webappp/

When I run the created container from command line run -d -v /webappp --name webapp myOrg/webapp echo yo

I get the error Error response from daemon: Cannot start container db7fd5cd40d76311f8776b1710b4fe6d66284fe75253a806e281cd8ae5169637: exec: "echo": executable file not found in $PATH which if of course correct because the image has no commands at all the can be executed. Running a container without a command is not possible.

While this error on command line is not a big problem for me because I know the data container is still created and can now be accessed by nginx it turns out to be a no go if I want to automate it with Vagrant. The automated processes always fail because of this error.

My only solution so far is to extend my little handy image from from a distro which IMHO doesn't make sense for a data only container in order just to call echo or true!

Is there a NOP exec command in docker or does docker need always to execute something, is it possible to run a scratch container that does nothing or does not produce an error.

like image 755
Vad1mo Avatar asked Jan 07 '15 09:01

Vad1mo


People also ask

Is it a good idea to Containerize a database?

They need both portability and elastic scaling, and containers are the best way to accomplish those goals. Databases need the advantages containerization brings, especially if the database is deployed in more than one place.

How do I run an existing container in Docker?

Follow these steps: Use docker ps to get the name of the existing container. Use the command docker exec -it <container name> /bin/bash to get a bash shell in the container. Or directly use docker exec -it <container name> <command> to execute whatever command you specify in the container.

Can we Dockerize database?

Docker is great for running databases in a development environment! You can even use it for databases of small, non-critical projects which run on a single server. Just make sure to have regular backups (as you should in any case), and you'll be fine.

What is from scratch in Dockerfile?

FROM scratch You can use Docker's reserved, minimal image, scratch , as a starting point for building containers. Using the scratch “image” signals to the build process that you want the next command in the Dockerfile to be the first filesystem layer in your image.


2 Answers

As mentioned in the Docker manual: The container don't need to be running. It also doesn't say that the container "should" be able to run at all.

So instead of echoing something stupid by running a data only container e.g. docker run -v /webappp --name webapp myOrg/webapp echo yo

It is already enough to just create the container and never run/start it.

docker create -v /webappp --name webapp myOrg/webapp

Note to self: Vagrant does not support docker create when provisioning!

like image 81
Vad1mo Avatar answered Sep 22 '22 05:09

Vad1mo


Why are you using scratch?

Just use the nginx image as a base. You already have the image cached so it won't take up any more space and you'll be able to call echo.

Some references for data containers:

  • Data-only container madness
  • Understanding Volumes in Docker
  • Offiical docs on data containers
like image 42
Adrian Mouat Avatar answered Sep 21 '22 05:09

Adrian Mouat