Reputation: 5041
I am new to docker. I have a shell script that loads data into impala and I want a docker file that runs builds an image and run the container.
I am on mac, installed boot2docker and have the DOCKER_HOST
env set up.
bash-3.2$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.15.3-tinycore64
Debug mode (server): true
Debug mode (client): false
Fds: 10
Goroutines: 10
EventsListeners: 0
Init Path: /usr/local/bin/docker
Sockets: [unix:///var/run/docker.sock tcp://0.0.0.0:2375]
I am trying to just installed a pre-built image using:
sudo docker pull busybox
I get this error:
sudo docker pull busybox
2014/08/18 17:56:19 Post http:///var/run/docker.sock/images/create?fromImage=busybox&tag=: dial unix /var/run/docker.sock: no such file or directory
Is something wrong with my docker setup?
When I do a docker pull busybox
, It pulls the image and download is complete.
bash-3.2$ docker pull busybox
Pulling repository busybox
a9eb17255234: Download complete
fd5373b3d938: Download complete
d200959a3e91: Download complete
37fca75d01ff: Download complete
511136ea3c5a: Download complete
42eed7f1bf2a: Download complete
c120b7cab0b0: Download complete
f06b02872d52: Download complete
120e218dd395: Download complete
1f5049b3536e: Download complete
bash-3.2$ docker run busybox /bin/echo Hello Doctor
Hello Doctor
Am I missing something?
Upvotes: 98
Views: 164788
Reputation: 1582
In your running dockerd,
/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ^^^^^^^ (Marker ^^^ is added by me to point to the position within a line, it's not a part of the shell output.)
According to daemon socket option doc, the -H fd:// means the daemon is using a file descriptor managed by systemctl. There will be no socket file /var/run/docker.sock in this case. But docker cli will try to connect to the docker daemon via the docker.sock socket file, that's where the problem comes from.
The solution In the case I run into, the docker daemon is brought up via systemctl as a service, you can find the service file path using systemctl command, for example, (marker ^^^ is added by me to point to the position within a line, it's not a part of the shell output)
ubuntu-linux-22-04-desktop:~$ sudo systemctl status docker
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Active: active (running) since Fri 2023-05-19 23:59:31 CST; 55s ago ... Then, modify that file on the line how dockerd is brought up
sudo vim /lib/systemd/system/docker.service In the opened file, find a line starts with ExecStart=/usr/bin/dockerd
[Unit] Description=Docker Application Container Engine ...
[Service] Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
... Modify the -H argument in dockerd command to use unix socket rather than fd, change the line to
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock Save the file (in vim, command model, zz), then reload
sudo systemctl daemon-reload Then, restart docker daemon
sudo systemctl restart docker After docker daemon restart finishes, you should be able to see the socket file
ll /var/run/*.sock docker cli should work now. Try something like
docker ps Hope will help to solve your problem.
Upvotes: 0
Reputation: 1156
In case anyone stumbles on this: for Docker Desktop on Mac you have to enable this option in settings
Upvotes: 9
Reputation: 11
run the following commands, OS = CentOS / RHLE / Amazon Linux, etc.
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
chmod 777 /var/run/docker.sock
Upvotes: 1
Reputation: 8021
On my MAC when I start boot2docker-vm on the terminal using
boot2docker start
I see the following
To connect the Docker client to the Docker daemon, please set:
export DOCKER_CERT_PATH=<my things>
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://<ip>:2376
After setting these environment variables I was able to run the build without the problem.
Update [2016-04-28] If you are using a the recent versions of docker you can do
eval $(docker-machine env)
will set the environment
(docker-machine env
will print the export statements)
Upvotes: 26
Reputation: 975
I have installed the docker using offline method and post server restart docker is not running. So, I executed the below command it worked for me!
/usr/bin/dockerd > /dev/null
Upvotes: 0
Reputation: 9979
docker pull
will fail if docker service
is not running. Make sure it is running by
:~$ ps aux | grep docker
root 18745 1.7 0.9 284104 13976 ? Ssl 21:19 0:01 /usr/bin/docker -d
If it is not running, you can start it by
sudo service docker start
For Ubuntu 15 and above use
sudo systemctl start docker
Upvotes: 26
Reputation: 9577
You, maybe the not the OP, but someone may have a directory called /var/run/docker.sock/
already due to how many times you hack and slash to get things right with docker (especially noobs). Delete that directory and try again.
This helped me on my way to getting it to work on Centos 7.
Upvotes: 0
Reputation: 41
The first /var/run/docker.sock refers to the same path in your boot2docker virtual machine. Correcly write for windows /var/run/docker.sock
Upvotes: 0
Reputation: 11599
If you're using CentOS 7, and you've installed Docker via yum, don't forget to run:
$ sudo systemctl start docker
$ sudo systemctl enable docker
This will start the server, as well as re-start it automatically on boot.
Upvotes: 5
Reputation: 4596
In Linux, first of all execute sudo service docker start
in terminal.
Upvotes: 6
Reputation: 1323953
For boot2docker on Windows, after seeing:
FATA[0000] Get http:///var/run/docker.sock/v1.18/version:
dial unix /var/run/docker.sock: no such file or directory.
Are you trying to connect to a TLS-enabled daemon without TLS?
All I did was:
boot2docker start
boot2docker shellinit
That generated:
export DOCKER_CERT_PATH=C:\Users\vonc\.boot2docker\certs\boot2docker-vm
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://192.168.59.103:2376
Finally:
boot2docker ssh
And docker works again
Upvotes: 9
Reputation: 2461
I also got this error. Though, I did not use boot2docker but just installed "plain" docker on Ubuntu (see https://docs.docker.com/installation/ubuntulinux/).
I got the error ("dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?") because the docker daemon was not running, yet.
On Ubuntu, you need to start the service:
sudo service docker start
See also http://blog.arungupta.me/resolve-dial-unix-docker-sock-error-techtip64
Upvotes: 17
Reputation: 1268
To setup your environment and to keep it for the future sessions you can do:
echo 'export DOCKER_HOST="tcp://$(boot2docker ip 2>/dev/null):2375";' >> ~/.bashrc
Then:
source ~/.bashrc
And your environment will be setup in every session
Upvotes: 4
Reputation: 879
You can quickly setup your environment using shellinit
At your command prompt execute:
$(boot2docker shellinit)
That will populate and export the environment variables and initialize other features.
Upvotes: 45
Reputation: 15082
You don't need to run any docker commands as sudo
when you're using boot2docker
as every command passed into the boot2docker
VM runs as root by default.
You're seeing the error when you're running as sudo
because sudo
doesn't have the DOCKER_HOST
env set, only your user does.
You can confirm this by doing a:
$ env
Then a
$ sudo env
And looking for DOCKER_HOST
in each output.
As for having a docker file that runs your script, something like this might work for you:
Dockerfile
FROM busybox
# Copy your script into the docker image
ADD /path/to/your/script.sh /usr/local/bin/script.sh
# Run your script
CMD /usr/local/bin/script.sh
Then you can run:
docker build -t your-image-name:your-tag .
This will build your docker image, which you can see by doing a:
docker images
Then, to run your container, you can do a:
docker run your-image-name:your-tag
This run command will start a container from the image you created with your Dockerfile
and your build command and then it will finish once your script.sh
has finished executing.
Upvotes: 89