Fail to run docker while building an image

前端 未结 3 1970
既然无缘
既然无缘 2021-01-22 02:54

I tried to install a software with Docker while building an image and I get.

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. 
Is the         


        
相关标签:
3条回答
  • 2021-01-22 03:12

    Is there a way to run docker commands in a Dockerfile for creating images?

    No. You can’t run Docker commands from inside a Dockerfile.

    The usual approach to this is to share the host’s Docker socket with a container, but you can’t mount any volumes or host directories during an image build process. In principle you can run a secondary Docker inside a main Docker container (though this is discouraged, complicated, and fragile) but again since you can’t really start services inside a Dockerfile this won’t work.

    Given the sorts of things you’re trying to install in your image, it looks like you’re looking for some sort of system-level automation tool that can run directly on the host, not something that wants to run in a constrained container environment. Ansible, Salt Stack, and Chef are all popular options in this space.

    0 讨论(0)
  • 2021-01-22 03:19

    Ran into a similar challenge and these are the options I think:

    1. You can set the DOCKER_HOST environment variable in your dockerfile to an ip or host available outside the docker container. This is still not a flawless idea since that host will have to basically be available separately from the docker host. If you had a shared dockerhost in your enterprise that everyone could use for this then it might be fine but otherwise you're creating a somewhat complicated build system.

    2. Create a separate shell script to run the docker command outside the docker container build. Then copy the artifacts created by that step during your docker build. Not great because it's not 100% docker but still works good and is portable.

    3. Use sed with a dockerfile.template to inject the contents of the other dockerfile into your own dockerfile before doing a build. Like option 2 this still requires a pre build step and could also run into compatibility issues if you're not using the same OS in both dockerfiles.

    Given these 3 options option 2 seems like the best one.

    0 讨论(0)
  • 2021-01-22 03:22

    your problem is not with the Docker command, as it says in the error message your docker daemon is not running, or because of some configuration problem you can not connect to it.

    Did you just install Docker? Did you do all the steps in the Installation Guide?

    You can test your docker installation with docker run hello-world or sudo docker run hello-world

    If it only works with sudo it's because you didn't configure docker for your user, see: https://docs.docker.com/install/linux/linux-postinstall/

    0 讨论(0)
提交回复
热议问题