TLS없이 TLS 가능 데몬에 연결하려고합니까?


221

Docker 에 대해 배우려고 하지만 암호 오류 메시지가 계속 나타납니다.

아마도 가장 간단한 예는 설치된 Docker 버전을 인쇄하는 것입니다.

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

방금 사용자 안내서를 살펴보고 모든 단계를 정확하게 수행했기 때문에이 메시지가 표시되는 것에 놀랐습니다. 지금 어떻게해야합니까?

방금 사용 sudo하지 않으면 오류가 발생하지 않습니다.

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

물론 sudo, 길 어딘가에 사용해야 할 수도 있으므로 해결책이 아닙니다 ...

방금 " OS X사용하는 경우을 사용해서는 안됩니다 "라는 다른 페이지 있습니다 sudo. 그것들이 그 예를 위해서만 또는 일반적인 의미인지는 모르겠습니다.


38
바보 같은 질문이지만 도커 데몬을 시작 했습니까?
Usman Ismail

사용 설명서를 따르고 있으므로 도커 데몬이 시작되었다고 생각합니다. 다시 확인하려면 어떻게해야합니까?
Shawn

5
실제로 당신은 해결책을 찾았습니다. boot2docker를 사용하면 리눅스에서 sudo가 필요하지 않으며 항상 sudo가 필요합니다. boot2docker는 실제로 데몬에 올바르게 액세스하도록 설정된 가상 상자에서 해당 명령을 실행하기 때문입니다.
Usman Ismail

1
나는이 문제로 고심하고 sudo없이 실행 나를 위해 일했다
sak

6
OS X가 질문이나 태그에 명시 적으로 언급되어 있지는 않지만 거의 모든 답변은 OS X에 따라 다릅니다 ( boot2docker). 일반 답변에 관심이있는 사람은 내 답변을 참조하십시오.
Piotr Dobrogost

답변:


150

나를 위해 달리기 $(boot2docker shellinit 2> /dev/null)하면 문제가 해결되었습니다.

현재 터미널 세션에서 boot2docker shellinit명령 출력 (3 set -x ...줄)을 docker실행하여 boot2docker 가상 머신을 찾을 위치를 명령에 알려줍니다.

파일 $(boot2docker shellinit 2> /dev/null)의 맨 아래에 추가하면 터미널을 열 때마다 명령이 구성됩니다.~/.bash_profiledocker


피쉬 쉘을 사용하는 사람들 : boot2docker shellinit ^ /dev/null | source.


참고 2> /dev/null(그리고 물고기 상당 ^ /dev/null) 선택 사항입니다. @ pablo-fernandez가 제안한 것처럼 Writing ..선을 숨 깁니다 .


이미이 작업을 수행했지만 .bash_profile에 추가하겠습니다. 좋은 아이디어
Shawn

boot2docker 1.5에 확실히 도움이되었지만, 오래된 boot2docker 1.2는 제대로 작동하지 않았습니다
Max Markov

1
"Writting ..."문이 나타나지 않도록 stderr 리디렉션을 추가했습니다 : $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez

3
생선 껍질을 언급 해 주셔서 감사합니다! 나를 위해 문제를 해결했습니다.
cyrillk

1
아래 Salvador Dali의 답변에서 언급했듯이 boot2docker start쉘 초기화를 실행 하기 전에 실행해야합니다.
Kevin

78

sudo가 있거나없는 MacOS에서 동일한 오류가 발생했습니다.

나는 그것을 해결했다 :

boot2docker start
$(boot2docker shellinit)

추신 : Alan 에게 감사합니다. 이 방법은 공식 문서 에서 권장된다는 것을 알았습니다 .

PS2 : 때때로 boot2docker init두 개의 명령을 실행하기 전에 필요할 수 있습니다 (Aathan에게 감사합니다).


효과가 있었지만 왜 그런지 모르겠습니까? $ (boot2docker shellinit)는 무엇을하고 있습니까?
Emile

이것은 Mac OS X에서 작동했지만 Emile과 같은 질문이 있습니다. 왜 이것이 효과가 있었습니까?
닛산

Docker Tools가 설치된 Mac OSX 10.10.4에서는 작동하지 않았습니다.
b01

boot2docker shellinit를 실행했을뿐만 아니라 표시된 각 명령을 복사하고 실행해야했습니다. 링크의 공식 문서에 따르면이 명령은 필요한 명령 세트 만 표시한다고합니다.
Vitaliy Lebedev

Windows 컴퓨터에서도 나에게 도움이되었습니다.
Noushad

55

필자의 경우 (Linux Mint 17) 다양한 작업을 수행했으며 그 중 어느 것이 필요한지 확실하지 않습니다.

누락 된 Ubuntu 패키지가 포함되었습니다.

$ sudo apt-get install apparmor lxc cgroup-lite

사용자가 그룹에 추가되었습니다 docker:

$ sudo usermod -aG docker ${USER}

시작된 데몬 (openSUSE에 필요)

$ sudo docker -d

감사합니다 \ 속성


Usman Ismail 에게 감사합니다. 어쩌면 마지막 일이었을 것입니다 ...

바보 같은 질문이지만 도커 데몬을 시작 했습니까? – Usman Ismail 12 월 17 일 14시 15:04


Usman의 의견을 읽을 때 데몬을 확인하지 않았기 때문에 나를 위해 일한 솔루션에 대해 github @ MichaelJCole 에게도 감사드립니다 .

GitHub 코멘트 :

sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash

누락 된 패키지를 확인하고 기본 우분투 설치 지침을 잊어 버린 fredjean.net 게시물 과 다른 방법에 대해서는 Google에 감사드립니다.

cgroup-lite 및 lxc 패키지는 기본적으로 Linux Mint에 설치되어 있지 않습니다. 둘 다 설치하면 기본 이미지에서 bash를 실행 한 다음 이미지를 빌드하고 실행할 수 있습니다.


openSUSE에 대한 brettof86 의 의견 덕분에


2
감사! 제 경우에는 (Mint 17.1) 빠진 것이 었습니다.
Alexandre L Telles

2
docker group에 자신을 추가하면 나를 위해 일했습니다 sudo adduser $USER docker. 현재 사용자의 쉘에 적용되도록하기위한 간계 curgroup=$(id -gn) && newgrp docker && newgrp $curgroupsuperuser.com/questions/272061/
Tero Tilus

1
나는 이것이 점수가 훨씬 낮다는 사실이 리눅스보다 OS X를 사용하는 사람들이 더 많기 때문이라고 생각합니까? 우분투 14.04를 사용하고 있으며 저에게 효과적입니다.
icedwater 2016 년

1
openSUSE와 데몬을 시작하기
만하면됩니다

docker-machine에 대한 나의 무지를 실례합니다.하지만 모르겠습니다. 그러나 당신이 발견하면 의견이나 답변 편집에서 여기를 지적하십시오. : D
ElMesa

49

밑줄 문제는 간단합니다 – /var/run/docker.sock유닉스 도메인 소켓에 대한 권한이 없습니다 .

에서 데몬 소켓 옵션 도커 명령 줄 도커 1.6.0에 대한 참조 :

기본적으로 유닉스 도메인 소켓 (또는 IPC 소켓)은에 생성되며 /var/run/docker.sock, 루트 권한 또는 도커 그룹 멤버쉽이 필요 합니다.

사용자에게 권한을 부여하는 데 필요한 단계 는 Fedora의 Docker 설치 지침에 잘 설명되어 있습니다 .

사용자에게 Docker를 사용할 수있는 권한 부여

docker 명령 줄 도구는에서 /var/run/docker.sock소유 한 소켓 파일을 통해 docker 데몬 프로세스에 연결합니다 root:root. docker 명령에 sudo를 사용하는 것이 좋지만 사용자가이를 피하려면 관리자가 docker 그룹을 만들고 소유 /var/run/docker.sock하고이 그룹에 사용자를 추가 할 수 있습니다.

$ sudo groupadd docker
$ sudo chown root:docker /var/run/docker.sock
$ sudo usermod -a -G docker $USERNAME

위의 변경 사항을 적용하려면 로그 아웃했다가 다시 로그인하십시오. 일부 Linux 배포판 (Ubuntu)의 Docker 패키지는 이미 그룹에 배치 /var/run/docker.sock되어 docker위의 첫 두 단계를 불필요하게 만듭니다.

OS X boot2docker의 경우 상황이 다릅니다. Docker 데몬은 VM 내에서 실행 DOCKER_HOST되므로 Docker 클라이언트가 Docker 데몬을 찾을 수 있도록 환경 변수를이 VM으로 설정해야합니다. 이것은 $(boot2docker shellinit)쉘에서 실행 하여 수행됩니다 .


1
흠, 내 상황은 비슷하지만 미묘하게 다릅니다. 우분투 14.04에서 실행 중입니다. Docker가 올바르게 설치된 것처럼 보입니다 ( "docker"만 입력하면 명령 목록이 표시됨). 도커 그룹을 만들고 내 사용자를 그룹으로 만들었습니다. 이것은 단지 홈 시스템이며 도커로 놀고 있습니다. 그러나 "docker"이외의 다른 오류가 발생합니다. 도 커가 /var/run/docker.sock을 만들 수 없기 때문에 그것을 믿습니다. 내 시스템에서 / var / run은 root : root 및 755 perm 인 / run에 대한 심볼릭 링크이므로 docker는 거기에 쓸 수 없습니다. 이것에 대한 나의 해결책이 무엇인지 확실하지 않습니다.
Steve Cohen

Piotr,이 설명은 매우 유용합니다. 왜 "$ (boot2docker shellinit)"가 작동하지만 일반 "boot2docker shellinit"가 작동하지 않는지 자세히 설명 할 수 있습니까? 나는 괄호는 서브 쉘에서 실행을 의미하는 것을 이해하지만 나는 다른 명령의 아무도 그것을 필요로하지 않을 때 그 .... 제대로 고정 표시기 작동하게하는 것이 필요 이유를 퍼즐 수 없었던
알렉스 에델

@AlexEdelstein boot2docker shellinit와 다른 명령 의 차이점은 이 명령은 자체적으로 변경하지 않고 스스로 실행해야하는 명령 만 생성한다는 것입니다. boot2docker shellinit먼저 실행 한 다음 출력에서 ​​각 명령을 수동으로 복사하고 실행할 수 있습니다 . boot2docker shellinit서브 프로세스 ( $()구문 포함) 에서 실행하면 모든 출력 행이 쉘 명령으로 자동 실행되므로 모든 명령을 실행하는 것이 더 쉽습니다 . 자세한 내용은 docs.docker.com/installation/mac/#from-your-command-line을 참조하십시오 .
Piotr Dobrogost 12

@SteveCohen 도커 서비스가로 실행 중인지 확인할 수 있습니다 sudo service docker status. Ubuntu 14.04에서 설치 후 실행되지 않아 오류가 발생했습니다.
razz0

1
감사 근본 원인에 대한 실제 문서를 링크하는, 내 문제 해결
RonaldFindling

23

Docker 데몬이 실행 중인지 확인하십시오.

service docker start

그것은 나를 위해 그것을 고쳤다!


sudo service docker start나를 위해
Milimetric

systemctl enable docker.service그리고 systemctl start docker.service system.d 리눅스 사용자를 위해 (내 경우에는 Arch)
PRDeving

sudo service docker restart나를 위해
Frozen Flame

15
  1. Docker는 Linux 컨테이너에 대해 자체적으로 충분한 런타임이라고합니다. 간단히 말해서 서버와 클라이언트의 역할을합니다.
  2. $ docker version명령 쿼리는 부두 노동자 실행 파일이 아닌 데몬 / 서비스 실행의 내부입니다.
  3. $ docker images or $ docker ps or $ docker pull centos 실행중인 docker 데몬 / 서비스에 쿼리를 보내는 명령입니다.
  4. Docker는 기본적으로 데몬 / 서비스에 대한 TLS 연결을 지원합니다.
  5. 예를 들어 , 로그인 한 사용자가 사용자 그룹의 일부 docker이거나 sudo명령 전에 사용한 $ sudo docker images경우에만 TLS 연결이 필요하지 않습니다.

Docker 문서 페이지를 방문하십시오 . Docker 데몬 소켓을 보호하십시오 .

약간 위로 스크롤하여 warning section선명도를 찾으십시오 .


1
지금까지 인기있는 답변은 OS X에만 적용되는 반면,이 답변은 훨씬 일반적이며 원인을 설명하고 GNU / Linux에서 해결할 수있게했습니다.
sinisterstuf

1
@laffuste 명령은 사용자 추가 그룹을 삭제합니다. "-a"가
빠졌기

3
@PawelBarcik 끔찍한 실수, 감사 :sudo usermod -a -G docker {username}
laffuste

1
답변 은 질문에 어떻게 대답합니까? 오류의 원인은 무엇입니까? 고치는 방법? (나는 OS X에 있지 않으므로 기존 답변이 적용되지 않습니다).
Piotr Dobrogost

13

다음을 수행해야합니다.

$boot2docker init
$boot2docker start

다음 설정으로 문제가 해결되었습니다.

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

1
이 명령을 사용하여 환경 변수를 수동으로 설정하지 않고 설정할 수도 있습니다.eval "$(boot2docker shellinit)"
Powers

11

파일에 대한 권한이 아직 없을 수 있습니다. docker그룹을 사용하여 나 자신을 추가 한 후에는

sudo gpasswd -a user docker

아직 로그 아웃하지 않았습니다.

이 문제를 해결하려면 다시 로그인하거나 sg docker "docker <subcommand> ..."로그 아웃하기 전에 사용할 수 있습니다.

당신이 그룹에있는 경우 docker/etc/group, 당신은 입력 암호없이 실행할 수 있어야합니다.

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a- tls 지원 데몬없이 tls /


7

lxc-docker 를 설치 한 후 Ubuntu에서 사용자를 docker 사용자 그룹 에 추가해야합니다 .

sudo usermod -a -G docker myusername

이것은 소켓 파일 권한 때문입니다.

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

다른 의견 중 하나에서 제안 된대로 "-a"없이 usermod를 실행하지 마십시오 . 그렇지 않으면 추가 그룹 설정이 지워지고 "docker"그룹 만 남습니다.

이것이 일어날 것입니다 :

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

6

TLDR : 도커 설치에 클리닉을 운영하고 대부분의 사용자가 OS X에 있었을 때 Python meetup 그룹 에이 문제가 발생했습니다.

boot2docker init
boot2docker up

export출력이 제공 하는 명령을 실행 한 다음

docker info

작동한다고 말해야합니다.


맥락 (문제를 일으킨 원인)

도커 설치에 대한 클리닉을 이끌었고 대부분의 참석자에게는 OS X가 있었고이 문제가 발생하여 여러 컴퓨터에서 극복했습니다. 우리가 따랐던 단계는 다음과 같습니다.

먼저, 우리는 homebrew를 설치했습니다 (예, 일부 참석자에게는 없었습니다).

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

그런 다음 우리는 cask을 얻었고, 우리는 virtualbox를 설치하고 brew를 사용하여 docker와 boot2docker를 설치했습니다 (모두 OS X에 필요함) brew에 sudo를 사용하지 마십시오. :

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker

해결책

그때 우리가 문제를 겪었을 때였습니다. 다음과 같이 수정했습니다. 이해가 init일회성 거래,하지만 당신은 아마 실행해야 up당신이 고정 표시기를 시작할 때마다 :

boot2docker init
boot2docker up

그런 다음 up실행되면 몇 가지 export명령 이 제공 됩니다. 복사하여 붙여 넣어 실행하십시오.

마지막으로 docker info제대로 설치되었다는 메시지가 나타납니다.

데모하기

나머지 명령은 데모해야합니다. (우분투 리눅스에서는 sudo가 필요했습니다.)

docker run hello-world
docker run -it ubuntu bash

그런 다음 컨테이너의 루트 셸에 있어야합니다.

apt-get install nano
exit

기본 사용자 배쉬로 돌아 가기 :

docker ps -l

"컨테이너 ID"에서 약 12 ​​자리 16 진수 (0-9 또는 af) 식별자를 찾으십시오 (예 :) 456789abcdef. 그런 다음 변경 사항을 커밋하고 다음과 같이 설명적인 이름을 지정할 수 있습니다 descriptivename.

docker commit 456789abcdef descriptivename`

5

Linux Ubuntu / Mint에서 Docker를 실행하는 데 필요한 모든 것 :

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart

선택적으로 위의 방법으로 작동하지 않으면 두 개의 추가 종속성을 설치해야 할 수도 있습니다.

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

1
가능하다면 나 자신에게 +1을 줄 것이다-나는 해결책을 찾고 있었고 내가 잊어 버린 내 자신의 해결책을 찾았다 :)
tomrozb

이것은 나를 도왔다. 설치 후 도커 서비스가 실행되고 있지 않다는 것을 알았으므로 sudo service docker start우분투 14.04의 문제를 해결했습니다.
razz0

3

여기서 해결책을 시도했지만 boot2docker가 작동하지 않았습니다.

내 솔루션 : Mac에서 boot2docker를 제거하고 VirtualBox에 Centos 7 VM을 설치 한 후 해당 VM 내에서 Docker를 사용하십시오.


3

나를 위해 다음 단계가 효과적이었습니다.

  1. docker run hello-world질문에서와 같이이 양말 오류로 실행 이 실패하는 것을 알았지 만 실행이 sudo docker run hello-world작동했습니다.
  2. 현재 사용자를 docker그룹에 추가했습니다 sudo adduser user docker. 그런 다음 컴퓨터를 다시 시작하거나 사용해야합니다 su - user( 그룹 groups에있는 경우 명령을 사용하여 확인 docker).

그 후 일을 hello-world시작했다.

내 대답은 sudo없이 어떻게 docker를 사용할 수 있습니까? 무엇이 잘못되었는지 설명합니다.



자신을 그룹에 추가 한 후`newgrp docker; newgrp primary-group 이것은 새로운 기본 docker 그룹과 함께 서브 쉘을 생성 한 다음 올바른 primary 그룹을 다시 설정합니다. (약간 해킹).
ctrl-alt-delor

2

가치가있는 것에 대해이 질문과 관련 질문 에있는 모든 솔루션을 시도했지만 VirtualBox를 제거하고 다시 설치할 때까지 아무도 문제를 해결하지 못했습니다 . 이 프로세스는 VirtualBox를 버전 4.2.16에서 4.3.22로 업그레이드했습니다 (이전 버전은 시스템에서 몇 달 동안 사용되지 않은 상태였습니다).

그런 다음 boot2dockerdocker기타 조정없이 일했다.


2

나는 같은 문제가 있었다. 간단한 service docker restart문제로 해결되었습니다.


2

Docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 사용자 루트가 소유하고 다른 사용자는 sudo를 통해서만 액세스 할 수 있습니다. Docker 데몬은 항상 루트 사용자로 실행됩니다.

sudo groupadd docker
sudo usermod -aG docker $USER

그룹 멤버쉽이 다시 평가되도록 로그 아웃했다가 다시 로그인하십시오.

docker run hello-world

출처 : Docker를 루트가 아닌 사용자로 관리


1

나는 똑같은 문제를 겪고이 문제를 해결하기 위해 다양한 일을 시도했지만 .bash_profile 파일을 수정하고 로그인하고 로그 아웃했습니다. 결국 내 컴퓨터를 다시 시작하면 문제가 해결되었습니다.


0

있는지 확인하십시오

127.0.0.1    localhost

당신의

`/etc/hosts `

파일.


0

Jenkins에서 Docker 이미지를 만들 때도 같은 문제가 발생했습니다. 단순히 사용자를 docker그룹에 추가 한 다음 Docker 서비스를 다시 시작하십시오. 제 경우에는 Jenkins 서비스를 다시 시작해야했습니다.

이것은 내가 얻은 오류였습니다.

http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile

Solution:

[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[root@Jenkins ssh]#

-1

또 다른 가능한 이유는 BIOS CPU 시각화 가 활성화되어 있지 않기 때문입니다. 가서 먼저 활성화하십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.