Compose: SSL ์˜ค๋ฅ˜ : [SSL : CERTIFICATE_VERIFY_FAILED] ์ธ์ฆ์„œ ํ™•์ธ ์‹คํŒจ

์— ๋งŒ๋“  2015๋…„ 01์›” 27์ผ  ยท  182์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/compose

์ด ์˜ค๋ฅ˜๋Š” ๋‘ ์ปดํ“จํ„ฐ์—์„œ ๊ฑฐ์˜ ๋™์‹œ์— docker-compose ์‚ฌ์šฉํ•˜๊ณ  ์ตœ๊ทผ์—๋Š” ๋กค๋ฐฑ ํ›„ fig์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ python / openssl ๋ฌธ์ œ๋ฅผ ๊ฐ€๋ฆฌ ํ‚ค์ง€ ๋งŒ ์–ด๋””๋กœ ํŒŒ์•ผํ• ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Python / openssl์€ homebrew์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Boot2Docker-cli ๋ฒ„์ „ : v1.4.1
ํž˜๋‚ด ์ปค๋ฐ‹ : 43241cb

ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „ : 1.4.1
ํด๋ผ์ด์–ธํŠธ API ๋ฒ„์ „ : 1.16
Go ๋ฒ„์ „ (ํด๋ผ์ด์–ธํŠธ) : go1.4
Git ์ปค๋ฐ‹ (ํด๋ผ์ด์–ธํŠธ) : 5bc2ff8
OS / Arch (ํด๋ผ์ด์–ธํŠธ) : darwin / amd64
์„œ๋ฒ„ ๋ฒ„์ „ : 1.4.1
์„œ๋ฒ„ API ๋ฒ„์ „ : 1.16
Go ๋ฒ„์ „ (์„œ๋ฒ„) : go1.3.3
Git ์ปค๋ฐ‹ (์„œ๋ฒ„) : 5bc2ff8

arepackaging

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์ฒ˜์Œ์œผ๋กœ ์ œ๊ธฐ ํ•œ ์‚ฌ๋žŒ์€ ์•„๋‹ ์ˆ˜ ์žˆ์ง€๋งŒ curl ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๊ด€๋ จ์—†๋Š” Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ,
์ œ์ด์Šจ ๋ฐ€์Šค

  • ๋ชจ๋ฐ”์ผ์—์„œ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

2016 ๋…„ 5 ์›” 7 ์ผ ์˜คํ›„ 3:22์— Lorenzo Sicilia [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

CURL_CA_BUNDLE์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋Œ€์‹  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
CURL_CA_BUNDLE = ~ / .docker / machine / machines / default / ca.pem docker-compose ps

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋ชจ๋“  182 ๋Œ“๊ธ€

docker-compose ๋ฆด๋ฆฌ์Šค ํ›„๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ด๋„ ๋˜‘๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ...

$ docker-compose ps
SSL error: hostname '192.168.59.103' doesn't match 'boot2docker'

ํ•˜์ง€๋งŒ fig ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ...

$ fig -f docker-compose.yml ps
Name   Command   State   Ports
------------------------------

์ €๋Š” OSX์—์„œ @gkostyanikov ์™€ ๋™์ผํ•œ ๋ฒ„์ „์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, Go ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „์€ go1.3.3 ์ž…๋‹ˆ๋‹ค. ๋‚ด python / openssl๋„ Homebrew๋ฅผ ํ†ตํ•ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ : ์‹ค์ œ๋กœ Homebrew๊ฐ€ openssl์„ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฏ€๋กœ ๊ธฐ๋ณธ OSX ๋ฒ„์ „ ์ธ OpenSSL 0.9.8za 5 Jun 2014 ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” Homebrew python์ด์—ˆ์Šต๋‹ˆ๋‹ค.

docker-compose ์ง€๊ธˆ์€ ์„ค์น˜, ์‚ฌ์ œ ํŒŒ์ด์ฌ / OpenSSL์„ ์ œ๊ฑฐํ•œ ํ›„ ์ž‘๋™ pip ๊ฐ€์ง„ easy_install , ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์„ค์น˜ docker-composer ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉ.

@adambiggs ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ๊ฐ์‚ฌ!

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ๋„ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ƒˆ๋กœ์šด Mac์„ ์‚ฌ์šฉํ•˜๊ณ  ํ™ˆ๋ธŒ๋ฅ˜ ํŒŒ์ด์ฌ์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฌดํ™”๊ณผ ์—์„œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. @adambiggs์˜ ์กฐ์–ธ์„ ๊ทธ๋Œ€๋กœ

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹œ์Šคํ…œ์˜ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์— ์„ค์น˜ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ virtualenv (wrapper)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

mkvirtualenv --python=/usr/bin/python docker-compose
pip install docker-compose==1.1.0-rc2

pyenv ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python 2.7.8๋กœ ๋กค๋ฐฑํ•˜๋Š” ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

http://stackoverflow.com/a/28216459/1166293
https://github.com/yyuu/pyenv

ํŽธ์ง‘ : ์‹ ๊ฒฝ ์“ฐ์ง€ ๋งˆ์„ธ์š”, pyenv ์ž์ฒด ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค ...

์ด ์˜ค๋ฅ˜์˜ ์›์ธ์€ home-brew openssl์ด / usr / local / bin / openssl์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

openssl version

OpenSSL 0.9.8zc ๋ฐ˜ํ™˜ OpenSSL 1.0.1j๊ฐ€ ์•„๋‹Œ

๋‹ฌ๋ฆฌ๋Š”

brew link --force openssl

fig๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ์ง€ ๋งŒ ์ œ OpenSSL ๋ฒ„์ „์€

@aanand ์ œ ๊ฒฝ์šฐ์—๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์—์ด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” homebrew๊ฐ€ ์•„๋‹Œ โ€‹โ€‹pip๋ฅผ ํ†ตํ•ด fig๋ฅผ ์„ค์น˜ํ–ˆ์„ ๋•Œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. sudo pip uninstall fig ๋ฐ brew install fig ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@NotBobTheBuilder ์†”๋ฃจ์…˜์˜ ๊ฒฝ์šฐ +1, ์ €์—๊ฒŒ๋„

: +1 : @NotBobTheBuilder ์šฉ

@NotBobTheBuilder ๋ฌดํ™”๊ณผ์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์ด์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ๋„์ปค ์ž‘์„ฑ์€ homebrew์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ocasta OpenSSL ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ homebrew์˜ ๋ฌด์„œ์šด ๊ฒฝ๊ณ ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์ด ๊ณต์‹์€ ํ†ต ์ „์šฉ์ž…๋‹ˆ๋‹ค.
Mac OS X์€ ์ด๋ฏธ์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๋‹ค๋ฅธ ๋ฒ„์ „์„
๋ณ‘๋ ฌ์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Apple์€ ์ž์ฒด TLS ๋ฐ ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•ด OpenSSL ์‚ฌ์šฉ์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

@NotBobTheBuilder ์—„์ง€

๋ˆ„๊ตฌ๋“ ์ง€์ด ๋ฌธ์ œ์˜ ์›์ธ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋ฌดํ™”๊ณผ์™€ ํ•จ๊ป˜ ๋‚˜์—๊ฒŒ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ์ฒ˜๋Ÿผ pip install fig ๋ฅผ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ์ฃผ ์ „์—๋Š” ๋ชจ๋‘ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์‹œ์Šคํ…œ์—์„œ ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‹œ์Šคํ…œ OpenSSL์€ OpenSSL 0.9.8zc 15 Oct 2014 ์ด๊ณ  ๋‚ด homebrew openssl์€ ๋” ์ƒˆ๋กญ์ง€ ๋งŒ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

... Python 2.7.9๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์„ ๋•Œ ๊ณ ์žฅ๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. SSL ๊ด€๋ จ ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196431
http://bugs.python.org/issue23052

brew link --force openssl ํ•˜๊ณ  fig๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•ด๋„ ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Py 2.7.9์˜ SSL ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด fig๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?
https://www.python.org/dev/peps/pep-0476/#opting -out

boot2docker๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ 1.5.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

In [1]: from fig.cli.docker_client import docker_client

In [2]: client = docker_client()

In [3]: client.version()

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

In [4]: %debug
> /Users/anentropic/.virtualenvs/dpm/lib/python2.7/site-packages/requests/sessions.py(461)request()
    460         send_kwargs.update(settings)
--> 461         resp = self.send(prep, **send_kwargs)
    462

ipdb> p settings
{'verify': '/Users/anentropic/.boot2docker/certs/boot2docker-vm/ca.pem', 'cert': ('/Users/anentropic/.boot2docker/certs/boot2docker-vm/cert.pem', '/Users/anentropic/.boot2docker/certs/boot2docker-vm/key.pem'), 'proxies': {}, 'stream': False}

๋ฌดํ™”๊ณผ ์ฝ”๋“œ๊ฐ€ ์ •ํ™• ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. boot2docker๊ฐ€ ์„ค์น˜ ํ•œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค ...์ด ์ธ์ฆ์„œ๋Š” ํ•ญ์ƒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•„์•ผํ•˜๋ฏ€๋กœ b2d๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

์Œ, ๋‚ด Python (homebrew๋ฅผ ํ†ตํ•ด ์„ค์น˜๋จ)์€ OpenSSL์˜ homebrew ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.0.2 22 Jan 2015
$ brew info openssl
openssl: stable 1.0.2 (bottled)
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

... /usr/local/opt/openssl/bin/c_rehash ์€ ๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. :)

๋™์ผํ•œ ๋ฌธ์ œ๋กœ $ brew switch python 2.7.8_2 ๋ฅผ ํ†ตํ•ด ์ด์ „์— ์„ค์น˜๋œ Python ๋ฒ„์ „ (2.7.8_2)์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค (์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋”๋ผ๋„). ๋”ฐ๋ผ์„œ ํŒŒ์ด์ฌ 2.7.9 ๋ฒ„์ „์€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ 1.0.2์—์„œ 1.0.1j_1๋กœ ์ด์ „ openssl ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.0.2 22 Jan 2015
$ docker-compose ps
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
$ brew switch openssl 1.0.1j_1
$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.0.1j 15 Oct 2014
$ docker-compose ps
Name   Command   State   Ports 
------------------------------

๋‚˜์—๊ฒŒ๋Š” ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ brew switch openssl 1.0.1j_1
Error: openssl does not have a version "1.0.1j_1" in the Cellar.
Versions available: 1.0.1e, 1.0.1f, 1.0.1g, 1.0.2
$ brew switch openssl 1.0.1g
Opt link created for /usr/local/Cellar/openssl/1.0.1g
$ fig up
SSL error: hostname '192.168.59.103' doesn't match 'boot2docker'

OpenSSL 1.0.2๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•˜๋ฉด ์ด์ „ CERTIFICATE_VERIFY_FAILED ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํ™•์‹คํžˆ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ docker-compose๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

git clone [email protected]:docker/fig.git
cd fig
docker build --tag docker-compose .

alias docker-compose='docker run --rm -e "DOCKER_TLS_VERIFY=$DOCKER_TLS_VERIFY" -e DOCKER_HOST=tcp://172.17.42.1:2376 -e DOCKER_CERT_PATH=/usr/local/certs -v "$DOCKER_CERT_PATH:/usr/local/certs" -v "$PWD:/code" docker-compose --project-name "${PWD##*/}"'

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” VirtualBox์—์„œ ํฌํŠธ 2376์„ ๋…ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

VBoxManage controlvm boot2docker-vm natpf1 "docker-s,tcp,127.0.0.1,2376,,2376"

@kretz ์˜ ๋‹ต๋ณ€์ด ์ €์—๊ฒŒ

+1 @kretz ์ถ”์ถœ ์Šค์œ„์น˜ openssl 1.0.1j_1
์†์ž„์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค

์–‘์กฐ ์Šค์œ„์น˜ openssl 1.0.1j๊ฐ€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค (_1 ๋ถ€์กฑ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค)

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ ๋‚ด virtualenv์—์„œ fig๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  homebrew๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•˜์—ฌ ๋‚˜๋ฅผ ์œ„ํ•ด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

@kretz ์—๊ฒŒ ๊ฐ์‚ฌ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$ brew switch openssl 1.0.1j_1
Error: openssl does not have a version "1.0.1j_1" in the Cellar.
Versions available: 1.0.2

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ brew์—์„œ ์–ป์€ 2.7.9๊ฐ€ ์•„๋‹Œ python 2.7.8๋กœ virtualenv๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ... ๋ˆ„๊ตฌ๋‚˜ ์‹ค์ œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

App Engine์€ ๋ฌด์—‡๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

2015 ๋…„ 3 ์›” 11 ์ผ 18:09์— Ryan Small [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŒŒ์ด์ฌ 2.7.9์—์„œ ์ž‘๋™ํ•˜๋Š” ์•ฑ ์—”์ง„์ด ์—†๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -78329652.

@anentropic ์ด์ „ openssl ๋ฒ„์ „์„ ์‚ฌ์šฉ (์ „ํ™˜)ํ•˜๋ ค๋ฉด ๋จผ์ € ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

# Find available older versions to install
$ brew search openssl
openssl
homebrew/versions/openssl098  homebrew/versions/openssl101

# Install older 1.0.1 version
$ brew install homebrew/versions/openssl101

# See what versions are installed locally
$ brew info openssl
...
/usr/local/Cellar/openssl/1.0.1f (429 files,  15M)
  Built from source
/usr/local/Cellar/openssl/1.0.1i (430 files,  15M)
  Poured from bottle
/usr/local/Cellar/openssl/1.0.1j (431 files,  15M)
  Poured from bottle
/usr/local/Cellar/openssl/1.0.1j_1 (431 files,  15M)
  Poured from bottle
/usr/local/Cellar/openssl/1.0.2 (459 files,  18M)
  Poured from bottle
...

# Switch to one of the 1.0.1 you got installed
$ brew switch openssl 1.0.1j_1

brew install openssl101 ํ–ˆ์ง€๋งŒ 1.0.1j ๋กœ ์ „ํ™˜ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค ... 1.0.1l ์คฌ๊ณ  ์ดํ›„ ์‹œ์Šคํ…œ์ด ํ˜ผ๋™ ๋ ๊นŒ๋ด ๊ฑฑ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค ๊ทธ๋“ค์€ ๋ณ„๋„์˜ ์–‘์กฐ ํŒจํ‚ค์ง€์ด๋ฉฐ ์ด๋ฏธ 1.0.2 ์„ ๋ณ‘๋ ฌ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์›€์ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ์•„๋งˆ ๋‚˜๋Š” ๊ทธ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ๋ฉ€๋ฆฌ ๊ฐ€์ง€ ์•Š์•˜๋‹ค

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ github ๋ฌธ์ œ์— ๋‹ต์žฅํ–ˆ์Šต๋‹ˆ๋‹ค (๋น ๋ฅด๊ฒŒ ๋‚ด ๋Œ“๊ธ€ ์‚ญ์ œ).
2015 ๋…„ 3 ์›” 11 ์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 11์‹œ 30 ๋ถ„ anentropic [email protected]
์ผ๋‹ค :

๋‚˜๋Š” openssl101์„ ์„ค์น˜ํ–ˆ์ง€๋งŒ ๊ฐ€๋Šฅ์„ฑ์„์ฃผ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
1.0.1j๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 1.0.1l๋ฅผ์คฌ๊ณ 
๊ทธ๋“ค์€ ๋ณ„๋„์˜ ์–‘์กฐ ํŒจํ‚ค์ง€์ด๊ณ  ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์‹œ์Šคํ…œ์„ ํ˜ผ๋™
1.0.2 ๋ณ‘๋ ฌ

๋„์›€์ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ์•„๋งˆ ๋‚˜๋Š” ๊ทธ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ๋ฉ€๋ฆฌ ๊ฐ€์ง€ ์•Š์•˜๋‹ค

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -78340580.

๊ทธ๋ž˜์„œ ๋‚˜๋Š”์ด ๋ฌธ์ œ๊ฐ€ Mac OSX์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ์€ ๋‚ด .yml ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

web:
    build: .
    links:
        - db
        - cache
        - worker
    ports:
        - "8080:8080"
db:
    image: mysql
cache:
    image: redis
worker:
    build: .
    command: celery -A application.extentions worker -l info

docker-compose pull ์‹คํ–‰ํ•  ๋•Œ ์‹คํŒจํ•œ ๋‹ค์Œ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

$ docker-compose pull
Pulling db (mysql:latest)...
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

๋‚ด๊ฐ€ ํ™•์ธํ•œ ๋ช‡ ๊ฐ€์ง€.
which openssl; openssl version

/usr/local/bin/openssl
OpenSSL 1.0.2 22 Jan 2015

brew๋กœ ์„ค์น˜ํ•˜๋ฉด @psykzz ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

brew install docker-compose

@arvindtest ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ฐธ๊ณ ๋กœ, ์ด๊ฒƒ์œผ๋กœ ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช์€ ํ›„์— ์ด๊ฒƒ์€ boot2docker ๋ฌธ์ œ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ TLS๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์  ์ธ ๋ฐฉ๋ฒ•์€ ์•„์ง ์—†์ง€๋งŒ ์ง€์นจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/deis/deis/issues/2230

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

boot2docker ssh
sudo echo 'DOCKER_TLS = no'> / var / lib / boot2docker / profile

๊ทธ๋Ÿฐ ๋‹ค์Œ boot2docker๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
boot2docker ์ค‘์ง€
boot2docker ์‹œ์ž‘

~ / .bashrc์— ์ด์™€ ๋น„์Šทํ•œ ๊ฒƒ (ip๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค)

๋‚ด๋ณด๋‚ด๊ธฐ DOCKER_HOST = tcp : //192.168.59.103 : 2375
DOCKER_CERT_PATH ์„ค์ • ํ•ด์ œ
DOCKER_TLS_VERIFY ์„ค์ • ํ•ด์ œ

bashrc์—์„œ $ (boot2docker shellinit)

๋ชจ๋“  ๊ฒƒ์„ ์ œ๋Œ€๋กœ ๋„์™€์•ผํ•ฉ๋‹ˆ๊นŒ?

์—ฌ์ „ํžˆ TLS ์†”๋ฃจ์…˜์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
2015 ๋…„ 3 ์›” 21 ์ผ 23:05์— "coderfi" [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ด๊ฒƒ์œผ๋กœ ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช์€ ํ›„์— ์ด๊ฒƒ์€
boot2docker ๋ฌธ์ œ.
๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ TLS๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ์‚ฌ์šฉ์ž ์นœํ™”์  ์ธ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค
ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ์ง€์นจ์ด ์š”์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
deis / deis # 2230 https://github.com/deis/deis/issues/2230

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

boot2docker ssh
sudo echo 'DOCKER_TLS = no'> / var / lib / boot2docker / profile

๊ทธ๋Ÿฐ ๋‹ค์Œ boot2docker๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
boot2docker ์ค‘์ง€
boot2docker ์‹œ์ž‘

~ / .bashrc์— ์ด์™€ ๊ฐ™์€ ๊ฒƒ
IP๊ฐ€ ์ •ํ™•ํ•œ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค

๋‚ด๋ณด๋‚ด๊ธฐ DOCKER_HOST = tcp : //192.168.59.103 : 2375
DOCKER_CERT_PATH ์„ค์ • ํ•ด์ œ
DOCKER_TLS_VERIFY ์„ค์ • ํ•ด์ œ

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -84468058.

@kretz ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ๊ฐ์‚ฌ.

@psykzz $(boot2docker shellinit) ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ๋‚ด ์˜๊ฒฌ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. derp.

TLS๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” @coderfi ์˜ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์„ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. :)

@Matt ์˜ˆ, ์‰˜ ์ดˆ๊ธฐํ™” ์‰˜ ํ™•์žฅ ํŒ์— ๋Œ€ํ•ด ๋งž์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ boot2docker๊ฐ€ ์•„์ง ์‹œ์ž‘๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์˜ˆ๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Fi
2015 ๋…„ 3 ์›” 26 ์ผ ์˜ค์ „ 10์‹œ 18 ๋ถ„์— "anentropic" [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@coderfi https://github.com/coderfi ์˜ ์†”๋ฃจ์…˜์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
TLS ๋น„ํ™œ์„ฑํ™”๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -86630313.

์ด๊ฒƒ์€ ๋‹น์—ฐํ•œ ์ผ์ด์ง€๋งŒ TLS๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ OpenSSL์„ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ์ˆ˜ํ–‰์ค‘์ธ ์ž‘์—…์— ๋”ฐ๋ผ ์‹ ์ค‘ํ•˜๊ฒŒ ์ง„ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“  ๊ด€๋ จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค,ํ•˜์ง€๋งŒ ๋‚œ ๋น„์Šทํ•œ ์˜ค๋ฅ˜์‹œ ํŒ์—…ํ–ˆ๋‹ค pip ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•˜๋Š” Dockerfile ์—์„œ ๋‹น๊ฒจ gliderlabs/alpine:3.1 - progrium ๋ฐ ์Šน๋ฌด์›์˜ ์ตœ์†Œํ•œ์˜ ๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‹œ์Šคํ…œ ์ธ์ฆ์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๊ณ  pip ๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์š”๊ตฌ ์‚ฌํ•ญ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

RUN apk-install -X ca-certificates

์ œ์•ˆ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 1.0.1 OpenSSL ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋‚˜๋Š” ๋ชจ๋“  pip-installed docker-compose ๋ฒ„์ „์„ ์ œ๊ฑฐํ•˜๊ณ  brew install docker-compose ์–ด๋–ป๊ฒŒ ๋“  ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์†”๋ฃจ์…˜์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๋‚˜์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ ๋กญ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ boot2docker upgrade ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์ตœ์‹  boot2docker ๋ฒ„์ „์ด ์žˆ์œผ๋ฉฐ ์œ„์˜ ์ˆ˜์ • ์‚ฌํ•ญ ์—†์ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Homebrew ๊ฐœ๋ฐœ์ž๋Š” docker-py ๋ฐ docker-compose๊ฐ€ requests 2.6.0์„ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

https://github.com/Homebrew/homebrew/issues/38226#issuecomment -88083428

๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค ... ์†”๋ฃจ์…˜์ด ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ Charles๋ฅผ Mac OS X ํ”„๋ก์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

FWIW, pip๋ฅผ ํ†ตํ•ด docker-compose๋ฅผ ์„ค์น˜ํ•˜๋ฉด docker-compose๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (OS X Mavericks์—์„œ curl์„ ํ†ตํ•ด ์„ค์น˜ํ•˜๋ฉด illegal operation ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•จ). ์ดํ›„์—๋„ SSL ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. brew link --force openssl && brew switch openssl 1.0.1j ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@rseymour ๋Œ€๋‹ต์ด ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

brew์—์„œ openssl-1.0.1j ์„ ์ฐพ์ง€ ๋ชปํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด-github repo์—์„œ ์ด์ „ ๋ฒ„์ „์˜ openssl ๋ ˆ์‹œํ”ผ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ยป brew switch openssl 1.0.1j
Error: openssl does not have a version "1.0.1j" in the Cellar.
Versions available: 1.0.2a-1
ยป brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2a-1... 1543 symlinks removed
ยป brew install https://raw.githubusercontent.com/Homebrew/homebrew/62fc2a1a65e83ba9dbb30b2e0a2b7355831c714b/Library/Formula/openssl.rb
...
๐Ÿบ  /usr/local/Cellar/openssl/1.0.1j_1: 431 files, 14M, built in 4.2 minutes
ยป docker-compose up                                                                                                                   
Creating myservice...

1.0.1m๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ @lazyval ๋ฐฉ์‹์œผ๋กœ ์‹œ๋„ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

์–‘์กฐ ์„ค์น˜ https://raw.githubusercontent.com/Homebrew/homebrew/62fc2a1a65e83ba9dbb30b2e0a2b7355831c714b/Library/Formula/openssl.rb
๋ธŒ๋ฃจ ์Šค์œ„์น˜ openssl 1.0.1j_1
brew unlink openssl101 // ์ด์ „์— 1.0.1m๋ฅผ ์—ฐ๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—
์–‘์กฐ ๋งํฌ openssl --force
๋„์ปค ์ž‘์„ฑ PS

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

ํ˜„์žฌ Python 2.7.9 ์ด์ƒ์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•ด์•ผํ•˜๋ฏ€๋กœ์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

_ # 1427์—์„œ ์žฌ๋ฐฐ์น˜ _

์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

  • CoreOS ์•ˆ์ •
  • Docker 1.5.0

๊ณ ๊ฐ:

  • CentOS 6.6, 64 ๋น„ํŠธ
  • ์ปค๋„ 2.6.32-042stab105.14
  • Docker ํด๋ผ์ด์–ธํŠธ 1.5.0
  • ๋„์ปค ์ž‘์„ฑ 1.2.0
  • ~/.docker/{ca.pem,cert.pem,key.pem} ๋ฐฐ์น˜ ๋œ SSL ์ธ์ฆ์„œ
  • DOCKER_HOST=tcp://docker-builder:2376
  • DOCKER_TLS_VERIFY=1

๋‹ค์Œ Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ SSL ์ธ์ฆ์„œ ๋นŒ๋“œ :

#!/bin/bash

SERVER=docker-builder

clean:
    rm ca.* server.* client.* *.key

all: ca.crt server.crt client.crt

%.key:
    openssl genrsa -out $@ 4096

ca.crt: ca.key
    openssl req -new -x509 -days 365 -key ca.key -sha256 -out ca.crt \
        -subj "/C=US/ST=Texas/L=Austin/O=Abc123/OU=Operations/CN=${SERVER}/[email protected]"

server.csr: server.key
    openssl req -new -key server.key -out server.csr \
        -subj "/C=US/ST=Texas/L=Austin/O=Abc123/OU=Operations/CN=${SERVER}/[email protected]"

server.crt: ca.key ca.crt server.csr
    openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key \
        -CAcreateserial -out server.crt

client.csr: client.key
    openssl req -new -key client.key -out client.csr \
        -subj "/C=US/ST=Texas/L=Austin/O=Abc123/OU=Operations/CN=Docker Client/[email protected]"

client.ext.cnf:
    echo "extendedKeyUsage = clientAuth" > client.ext.cnf

client.crt: client.csr ca.crt ca.key client.ext.cnf
    openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key \
        -CAcreateserial -out client.crt -extfile client.ext.cnf

๋‹ค์Œ์€์ด ๋จธ์‹ ์„ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ธฐ์œ„ํ•œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค (์ด์ƒ์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค).

#cloud-config

write_files:
    - path: /home/core/server.crt
      owner: core:core
      permissions: 0644
      content: |
        -----BEGIN CERTIFICATE-----
        <cert goes here>
        -----END CERTIFICATE-----


    - path: /home/core/server.key
      owner: core:core
      permissions: 0644
      content: |
        -----BEGIN RSA PRIVATE KEY-----
        <key goes here>
        -----END RSA PRIVATE KEY-----


    - path: /home/core/ca.crt
      owner: core:core
      permissions: 0644
      content: |
        -----BEGIN CERTIFICATE-----
        <ca cert goes here>
        -----END CERTIFICATE-----

coreos:
  update:
    reboot-strategy: reboot
  units:
  units:
    - name: var-lib-docker.mount
      command: start
      content: |
        [Unit]
        Description=Mount RAM to /var/lib/docker
        Before=docker.service
        [Mount]
        What=tmpfs
        Where=/var/lib/docker
        Type=tmpfs
        Options=size=200g
    - name: docker.service
      command: restart
      content: |
        [Unit]
        Description=Docker Application Container Engine
        Documentation=http://docs.docker.io
        After=network.target
        [Service]
        ExecStartPre=/bin/mount --make-rprivate /
        # Run docker but don't have docker automatically restart
        # containers. This is a job for systemd and unit files.
        ExecStart=/usr/bin/docker -d \
          --tlsverify \
          --tlscert=/home/core/server.crt \
          --tlscacert=/home/core/ca.crt \
          --tlskey=/home/core/server.key \
          -H 0.0.0.0:2376 -H unix:///var/run/docker.sock

        [Install]
        WantedBy=multi-user.target

docker ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๊ฒฉ ๋„์ปค ์„œ๋ฒ„์— ์„ฑ๊ณต์ ์œผ๋กœ ์•ก์„ธ์Šคํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„ฑ๊ณต์ ์œผ๋กœ ์›๊ฒฉ ์„œ๋ฒ„๋ฅผ ํ•˜๋ฃจ์— ์ตœ๋Œ€ ์‹ญ๋งŒ ๋ฒˆ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

docker-compose , curl์„ ํ†ตํ•ด ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ python 2.7๊ณผ ํ•จ๊ป˜ pip install --upgrade ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋ฉด SSL ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$ docker-compose up -d
SSL error: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

DOCKER_CERT_PATH=/home/user/.docker/ ๋ฐ REQUESTS_CA_BUNDLE=/home/user/.docker/ca.pem ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋˜๋Š” ํ•จ๊ป˜ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๋ช…ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด์ด ์„ค์ •์€ ๋„์ปค ๋ฐ๋ชฌ์—์„œ๋งŒ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ -compose ์€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ  ์‚ฌํ•ญ :

  1. OSX ์šฉ Compose 1.3.0 RC1 ๋ฐ”์ด๋„ˆ๋ฆฌ์—๋Š”์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์—ฐ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Python 2.7.9์— ๋Œ€ํ•ด ๋นŒ๋“œ ๋œ ๊ฒƒ์€ ์ด๋ฒˆ์ด ์ฒ˜์Œ์ž…๋‹ˆ๋‹ค. ์ด์ „์—๋Š” 2.7.6์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  2. ์ด์ƒํ•˜๊ฒŒ๋„ boot2docker VM์— ๋Œ€ํ•ด์„œ๋Š” ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Machine์—์„œ ํ”„๋กœ๋น„์ €๋‹ ํ•œ Virtualbox VM์— ๋Œ€ํ•ด์„œ๋Š” ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. @ehazlett , @nathanleclaire , @tianon- ๊ฑฐ๊ธฐ์— ์–ด๋–ค ํ†ต์ฐฐ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
  3. Compose๊ฐ€ Pip๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋˜์—ˆ์„ ๋•Œ์ด ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋‹ค์Œ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„๋ณด๊ณ ํ•˜์‹ญ์‹œ์˜ค.

$ python -V $ python -c 'import ssl; print ssl.OPENSSL_VERSION'

์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— Python 2.7.10 ๋ฐ OpenSSL 1.0.2a 19 Mar 2015 ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ด๊ฒƒ์€ Homebrew ์—๋ณด ๊ณ ๋˜์—ˆ์œผ๋ฉฐ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ Python ๋ฐ OpenSSL์„ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌ์„ค์น˜ํ–ˆ๋‹ค๊ณ  ๋งํ•˜์ง€๋งŒ ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/Homebrew/homebrew/issues/38226

ํ  ์ •๋ง ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฒ„์ „์˜ b2d๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
๊ธฐ๊ณ„? ์šฐ๋ฆฌ๋Š” ๋‘˜ ๋‹ค b2d๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฌด์—‡์ด ๋‹ค๋ฅผ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ฒ„์ „ ์™ธ์—.

๋‚ด OS X ์ปดํ“จํ„ฐ์— pip๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•˜๊ณ  ๋‚ด๊ฐ€ ์–ป๋Š” ๊ฒƒ์„ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2015 ๋…„ 5 ์›” 28 ์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 9:19, Aanand Prasad [email protected]
์ผ๋‹ค :

๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ  ์‚ฌํ•ญ :

1.

OSX ์šฉ Compose 1.3.0 RC1 ๋ฐ”์ด๋„ˆ๋ฆฌ์—๋Š”์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ์•„๋‹ˆ
์šฐ์—ฐํžˆ๋„ ์ด๊ฒƒ์€ Python 2.7.9์— ๋Œ€ํ•ด ์ฒ˜์Œ์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ „์—๋Š” 2.7.6์ด์—ˆ์Šต๋‹ˆ๋‹ค.
    2.

์ด์ƒํ•˜๊ฒŒ๋„ boot2docker VM์— ๋Œ€ํ•ด์„œ๋Š” ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
๋จธ์‹ ์—์„œ ํ”„๋กœ๋น„์ €๋‹ ํ•œ Virtualbox VM. ํ—‰ํ—‰
https://github.com/ehazlett , @nathanleclaire
https://github.com/nathanleclaire , @tianon
https://github.com/tianon- ๊ฑฐ๊ธฐ์— ํ†ต์ฐฐ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์‚ผ.

Compose๊ฐ€ Pip๊ณผ ํ•จ๊ป˜ ์„ค์น˜ ๋  ๋•Œ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ, ์ œ๋ฐœ
๋‹ค์Œ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

$ ํŒŒ์ด์ฌ -V
$ python -c 'import ssl; print ssl.OPENSSL_VERSION '

์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— Python์ด ์žˆ์Šต๋‹ˆ๋‹ค.
2.7.10 ๋ฐ OpenSSL 1.0.2a 2015 ๋…„ 3 ์›” 19 ์ผ.
4.

์ด๊ฒƒ์€ Homebrew์—๋ณด๊ณ ๋˜์—ˆ์œผ๋ฉฐ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€
Python ๋ฐ OpenSSL์„ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌ์„ค์น˜ํ–ˆ์ง€๋งŒ ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
์ž์ž‘ / ์ž์ž‘ # 38226
https://github.com/Homebrew/homebrew/issues/38226

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -106306690.

$ boot2docker version
Boot2Docker-cli version: v1.6.2
Git commit: cb2c3bc

$ docker-machine --version
docker-machine version 0.2.0 (8b9eaf2)

์ธ์ฆ์„œ ์ƒ์„ฑ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์ปดํ“จํ„ฐ ์ธ์ฆ์„œ ๋””๋ ‰ํ† ๋ฆฌ์— boot2docker๋ณด๋‹ค ๋” ๋งŽ์€ ํŒŒ์ผ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ $(boot2docker shellinit)
$ ls -l $DOCKER_CERT_PATH/*.pem
-rw-r--r--  1 aanand  staff  1042 28 May 14:27 /Users/aanand/.boot2docker/certs/boot2docker-vm/ca.pem
-rw-r--r--  1 aanand  staff  1070 28 May 14:27 /Users/aanand/.boot2docker/certs/boot2docker-vm/cert.pem
-rw-r--r--  1 aanand  staff  1675 28 May 14:27 /Users/aanand/.boot2docker/certs/boot2docker-vm/key.pem
$ eval "$(docker-machine env)"
$ ls -l $DOCKER_CERT_PATH/*.pem
-rw-r--r--  1 aanand  staff  1029 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/ca.pem
-rw-r--r--  1 aanand  staff  1054 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/cert.pem
-rw-r--r--  1 aanand  staff  1679 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/key.pem
-rw-------  1 aanand  staff  1679 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/server-key.pem
-rw-r--r--  1 aanand  staff  1086 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/server.pem

๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ca.pem, cert.pem ๋ฐ key.pem ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
(์„œ๋ฒ„๋Š” ์‹œ์Šคํ…œ์˜ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค). ๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.
์ž˜ํ•˜๊ณ  ์ธ์ฆ์„œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

2015 ๋…„ 5 ์›” 28 ์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 9์‹œ 30 ๋ถ„, Aanand Prasad [email protected]
์ผ๋‹ค :

$ boot2docker ๋ฒ„์ „
Boot2Docker-cli ๋ฒ„์ „ : v1.6.2
ํž˜๋‚ด ์ปค๋ฐ‹ : cb2c3bc

$ docker-machine --version
docker-machine ๋ฒ„์ „ 0.2.0 (8b9eaf2)

์ธ์ฆ์„œ ์ƒ์„ฑ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋” ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค
๋‚ด boot2docker๋ณด๋‹ค ๋‚ด ์ปดํ“จํ„ฐ ์ธ์ฆ์„œ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ.

$ $ (boot2docker shellinit)
$ ls -l $ DOCKER_CERT_PATH / *. pem
-rw-r--r-- 1 aanand staff 1042 5 ์›” 28 ์ผ 14:27 /Users/aanand/.boot2docker/certs/boot2docker-vm/ca.pem
-rw-r--r-- 1 aanand staff 1070 28 May 14:27 /Users/aanand/.boot2docker/certs/boot2docker-vm/cert.pem
-rw-r--r-- 1 aanand staff 1675 28 May 14:27 /Users/aanand/.boot2docker/certs/boot2docker-vm/key.pem

$ eval "$ (docker-machine env)"
$ ls -l $ DOCKER_CERT_PATH / *. pem
-rw-r--r-- 1 aanand staff 1029 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/ca.pem
-rw-r--r-- 1 aanand staff 1054 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/cert.pem
-rw-r--r-- 1 aanand staff 1679 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/key.pem
-rw ------- 1 aanand staff 1679 11 5 ์›” 12:15 /Users/aanand/.docker/machine/machines/dev/server-key.pem
-rw-r--r-- 1 aanand staff 1086 11 May 12:15 /Users/aanand/.docker/machine/machines/dev/server.pem

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -106309885.

grahamc@snap$ python -V
Python 2.7.6

grahamc@snap$ python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.1e-fips 11 Feb 2013

https://github.com/docker/docker-py/issues/465 ๋„ @garethr ์˜ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ์ˆ˜์ •์„ ํ•œ ํ›„ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

from docker.client import Client
from docker.utils import kwargs_from_env

kwargs = kwargs_from_env()
kwargs['tls'].assert_hostname = False

client = Client(**kwargs)
print client.version()
$ eval "$(boot2docker shellinit)" && python test.py
Writing /Users/aanand/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/aanand/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/aanand/.boot2docker/certs/boot2docker-vm/key.pem
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print client.version()
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", line 1108, in version
    return self._result(self._get(url), json=True)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", line 106, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", line 477, in get
    return self.request('GET', url, **kwargs)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

ํ•˜์ง€๋งŒ ๋จธ์‹  ํ”„๋กœ๋น„์ €๋‹ ๋œ VM์—์„œ๋Š” ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ eval "$(docker-machine env)" && python test.py
{u'KernelVersion': u'4.0.3-boot2docker', u'Arch': u'amd64', u'ApiVersion': u'1.18', u'Version': u'1.6.2', u'GitCommit': u'7c8fca2', u'Os': u'linux', u'GoVersion': u'go1.4.2'}

ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฒ€์‚ฌ๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๋ฉด (ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ์—์„œ assert_hostname ์ค„์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ) boot2docker-cli VM์— ๋Œ€ํ•ด์„œ๋Š” ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•˜์ง€๋งŒ Machine VM์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ์ด ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print client.version()
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", line 1108, in version
    return self._result(self._get(url), json=True)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", line 106, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", line 477, in get
    return self.request('GET', url, **kwargs)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: no appropriate commonName or subjectAltName fields were found

๋˜ํ•œ curl (pip๊ฐ€ ์•„๋‹Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฆด๋ฆฌ์Šค)์„ ํ†ตํ•ด v1.3.0-rc1์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ docker 1.6.2 ๋ฐ๋ชฌ์—์„œ ์ด์ „๊ณผ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

SSL error: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

์˜ˆ-RC1 ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” Python 2.7.9 ๋ฐ OpenSSL 1.0.2a๋กœ ๋นŒ๋“œ๋˜์—ˆ์œผ๋ฉฐ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ์กฐํ•ฉ ์ค‘ ํ•˜๋‚˜ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ b2d์˜ ์ธ์ฆ์„œ ์ƒ์„ฑ์ด VM์— ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๊ณ„๋Š” ๊ธฐ๊ณ„์—์„œ ๊ทธ๋“ค์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ง€ํ•˜๊ณ  ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ปดํ“จํ„ฐ ์ด๋ฆ„์„ SAN์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์•„๋งˆ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”
ํŠนํžˆ b2d VM์˜ ๊ฒฝ์šฐ. ์ง€๊ธˆ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋Š”
๋จธ์‹ ์ด IP SAN์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—”์ง„์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์ด์žˆ๋‹ค
PR์ด ์—ด๋ ค์„œ๋„ ์ž‘๋™ํ•˜๋Š” ์ž„์˜์˜ ์ถ”๊ฐ€ SAN์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

2015 ๋…„ 5 ์›” 28 ์ผ ๋ชฉ์š”์ผ Aanand Prasad [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

docker / docker-py # 465 ์ฐธ์กฐ
https://github.com/docker/docker-py/issues/465. ๋ฟก๋ฟก
https://github.com/garethr ์˜ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ์ˆ˜์ •์„ ํ•œ ํ›„ :

docker.client์—์„œ ๊ฐ€์ ธ ์˜ค๊ธฐ ํด๋ผ์ด์–ธํŠธ docker.utils์—์„œ ๊ฐ€์ ธ ์˜ค๊ธฐ kwargs_from_env

kwargs = kwargs_from_env ()
kwargs [ 'tls']. assert_hostname = False

client = Client (** kwargs) print client.version ()

$ eval "$ (boot2docker shellinit)"&& python test.py
/Users/aanand/.boot2docker/certs/boot2docker-vm/ca.pem ์ž‘์„ฑ
/Users/aanand/.boot2docker/certs/boot2docker-vm/cert.pem ์ž‘์„ฑ
/Users/aanand/.boot2docker/certs/boot2docker-vm/key.pem ์ž‘์„ฑ
์—ญ ์ถ”์  (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
ํŒŒ์ผ "test.py", 8 ํ–‰,
client.version () ์ธ์‡„
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", ์ค„ 1108, ๋ฒ„์ „
return self._result (self._get (url), json = True)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", 106 ํ–‰, _get
return self.get (url, * _self._set_request_timeout (kwargs))
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", 477 ํ–‰, get
return self.request ( 'GET', url, * _kwargs)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", 465 ํ–‰, ์š”์ฒญ์‹œ
resp = self.send (prep, * _send_kwargs)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", 573 ํ–‰, ์ „์†ก
r = adapter.send (์š”์ฒญ, * _kwargs)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/adapters.py", 431 ํ–‰, ์ „์†ก ์ค‘
SSLError (e, request = request) ๋ฐœ์ƒ
requests.exceptions.SSLError : [SSL : CERTIFICATE_VERIFY_FAILED] ์ธ์ฆ์„œ ํ™•์ธ ์‹คํŒจ (_ssl.c : 590)

ํ•˜์ง€๋งŒ ๋จธ์‹  ํ”„๋กœ๋น„์ €๋‹ ๋œ VM์—์„œ๋Š” ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ eval "$ (docker-machine env)"&& python test.py
{u'KernelVersion ': u'4.0.3-boot2docker', u'Arch ': u'amd64', u'ApiVersion ': u'1.18', u'Version ': u'1.6.2', u'GitCommit ': u'7c8fca2', u'Os ': u'linux', u'GoVersion ': u'go1.4.2'}

ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฒ€์‚ฌ๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๋ฉด (assert_hostname์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ
ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ์˜ ์ค„)์— ๋Œ€ํ•ด _same error_๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
boot2docker-cli VM์ด์ง€๋งŒ ๋จธ์‹  VM์— ๋Œ€ํ•œ _ ๋‹ค๋ฅธ ์˜ค๋ฅ˜ _
๊ด€๋ จ์„ฑ์ด์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ญ ์ถ”์  (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
ํŒŒ์ผ "test.py", 8 ํ–‰,
client.version () ์ธ์‡„
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", ์ค„ 1108, ๋ฒ„์ „
return self._result (self._get (url), json = True)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/docker/client.py", 106 ํ–‰, _get
return self.get (url, * _self._set_request_timeout (kwargs))
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", 477 ํ–‰, get
return self.request ( 'GET', url, * _kwargs)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", 465 ํ–‰, ์š”์ฒญ์‹œ
resp = self.send (prep, * _send_kwargs)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/sessions.py", 573 ํ–‰, ์ „์†ก
r = adapter.send (์š”์ฒญ, * _kwargs)
ํŒŒ์ผ "/Users/aanand/.virtualenvs/docker-compose/lib/python2.7/site-packages/requests/adapters.py", 431 ํ–‰, ์ „์†ก ์ค‘
SSLError (e, request = request) ๋ฐœ์ƒ
requests.exceptions.SSLError : ์ ์ ˆํ•œ commonName ๋˜๋Š” subjectAltName ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/890#issuecomment -106363305.

์ข‹์•„, OS X์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์— ๋„๋‹ฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค : https://github.com/docker/compose/pull/1474

๋ฆฌ๋ˆ…์Šค๋ฅผ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์€์—์„œ ์‹œ์ž‘ ์ฃผ์–ด์ง„ ์žฌ๋ฏธ์žˆ๋Š” ๋…ธ๋ ฅ ํ•  ๊ฒƒ์ด๋‹ค ํŒŒ์ด์ฌ 2.7.9 ๋ฐ OpenSSL์„ 1.0.1๋กœ ํ•€์— Dockerfile๋ฅผ ์—…๋ฐ์ดํŠธ ํฌํ•จ ํ•  ๊ฒƒ์ด๋‹ค debian:wheezy (์šฐ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์‚ฌ์šฉํ•˜๊ณ  ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” old glibc-https://github.com/docker/compose/pull/505 ์ฐธ์กฐ).

@kretz ์˜ ์˜๊ฒฌ์— ์„ค๋ช… ๋œ๋Œ€๋กœ 1.0.1k๋กœ ์ „ํ™˜ํ•˜๊ณ  pip๋ฅผ ํ†ตํ•ด 1.3.0 RC1์„ ์„ค์น˜ํ•˜๋ฉด ๋‚˜์—๊ฒŒ ํŠธ๋ฆญ์ด ์ƒ๊ฒผ ์Šต๋‹ˆ๋‹ค.

Python์„ ์ „ํ™˜ํ•˜๊ธฐ ์ „์— 1.0.2a๋ฅผ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

โฏ python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.2a 19 Mar 2015

์ „ํ™˜ ํ›„ 1.0.1k๊ฐ€๋ณด๊ณ ๋˜๊ณ  docker-compose๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โฏ python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.1k 8 Jan 2015

์ด ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‚ด virtualenv์— ๋‹ค์Œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
pip install pyopenssl==0.14 ndg-httpsclient==0.4 pyasn1==0.1.7

https://github.com/docker/compose/issues/890#issuecomment -106289821์— ์„ค๋ช… ๋œ ํ™˜๊ฒฝ์—์„œ Python 2.7.6์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค (snap-ci.com์„ ํ†ตํ•ด ๋ฌด๋ฃŒ ๊ณ„์ •์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ).

pip ์„ค์น˜ (https://github.com/docker/compose/issues/890#issuecomment-106806702)์—์„œ @ jsh2134 ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

#!/bin/bash

set -e
set -u
set -x


readonly DOCKER_VERSION=1.5.0
readonly TARGETFILE=$SNAP_CACHE_DIR/docker-$DOCKER_VERSION
[[ -f "$TARGETFILE" ]] || curl https://get.docker.io/builds/Linux/x86_64/docker-$DOCKER_VERSION > $TARGETFILE
cp $TARGETFILE ~/docker
chmod +x ~/docker


export DOCKER_HOST="tcp://docker-builds:2376" DOCKER_TLS_VERIFY=1

mkdir -p ~/.docker
cat > ~/.docker/ca.pem <<EOC
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

EOC
cat > ~/.docker/key.pem <<EOC
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

EOC
cat > ~/.docker/cert.pem <<EOC
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
EOC

function install_docker_compose {
  pip install --upgrade pip
  pip install --upgrade docker-compose
  pip install pyopenssl==0.14 ndg-httpsclient==0.4 pyasn1==0.1.7
  export COMPOSE=docker-compose
}

install_docker_compose

export COMPOSE_PROJECT_NAME=$(basename "$(pwd)")-${SNAP_COMMIT:-HEAD}

# Before running anything, setup the EXIT trap to always rm the container on
# exit of the script.
function cleanup {
  $COMPOSE kill
  $COMPOSE rm --force
}

trap cleanup EXIT

$COMPOSE --version
$COMPOSE build
$COMPOSE up -d

set +e
$COMPOSE run $@
exitcode=$?
set -e

set +x
echo ""
echo "Component Data:"
for id in `$COMPOSE ps -q`; do
  ~/docker inspect \
    -f 'Container {{ .Name }} exited with status {{ .State.ExitCode }}' $id
  ~/docker logs $id 2>&1 | sed -e "s/^/        /"
  echo "---"
done

exit $exitcode

๋‹ค์Œ ์ถœ๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

+ readonly DOCKER_VERSION=1.5.0
+ DOCKER_VERSION=1.5.0
+ readonly TARGETFILE=/var/go/docker-1.5.0
+ TARGETFILE=/var/go/docker-1.5.0
+ [[ -f /var/go/docker-1.5.0 ]]
+ cp /var/go/docker-1.5.0 /var/go/docker
+ chmod +x /var/go/docker
+ export DOCKER_HOST=tcp://docker-builds:2376 DOCKER_TLS_VERIFY=1
+ DOCKER_HOST=tcp://docker-builds:2376
+ DOCKER_TLS_VERIFY=1
+ mkdir -p /var/go/.docker
+ cat
+ cat
+ cat
+ install_docker_compose
+ /bin/true
+ pip install --upgrade pip
/var/go/py-virtualenv2.7/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Collecting pip
  Using cached pip-7.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 6.0.8
    Uninstalling pip-6.0.8:
      Successfully uninstalled pip-6.0.8
Successfully installed pip-7.0.1
+ pip install --upgrade docker-compose
/var/go/py-virtualenv2.7/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Requirement already up-to-date: docker-compose in /var/go/py-virtualenv2.7/lib/python2.7/site-packages
Requirement already up-to-date: docopt<0.7,>=0.6.1 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: PyYAML<4,>=3.10 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: requests<2.6,>=2.2.1 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: texttable<0.9,>=0.8.1 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: websocket-client<1.0,>=0.11.0 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: docker-py<1.2,>=1.0.0 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: dockerpty<0.4,>=0.3.2 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: six<2,>=1.3.0 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from docker-compose)
Requirement already up-to-date: backports.ssl-match-hostname in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from websocket-client<1.0,>=0.11.0->docker-compose)
+ pip install pyopenssl==0.14 ndg-httpsclient==0.4 pyasn1==0.1.7
Collecting pyopenssl==0.14
/var/go/py-virtualenv2.7/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading pyOpenSSL-0.14.tar.gz (128kB)
Collecting ndg-httpsclient==0.4
  Downloading ndg_httpsclient-0.4.0.tar.gz
Collecting pyasn1==0.1.7
  Downloading pyasn1-0.1.7.tar.gz (68kB)
Collecting cryptography>=0.2.1 (from pyopenssl==0.14)
  Downloading cryptography-0.9.tar.gz (302kB)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.2 in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from pyopenssl==0.14)
Collecting idna (from cryptography>=0.2.1->pyopenssl==0.14)
  Downloading idna-2.0.tar.gz (135kB)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /var/go/py-virtualenv2.7/lib/python2.7/site-packages (from cryptography>=0.2.1->pyopenssl==0.14)
Collecting enum34 (from cryptography>=0.2.1->pyopenssl==0.14)
  Downloading enum34-1.0.4.tar.gz
Collecting ipaddress (from cryptography>=0.2.1->pyopenssl==0.14)
  Downloading ipaddress-1.0.7-py27-none-any.whl
Collecting cffi>=0.8 (from cryptography>=0.2.1->pyopenssl==0.14)
  Downloading cffi-1.0.3.tar.gz (317kB)
Collecting pycparser (from cffi>=0.8->cryptography>=0.2.1->pyopenssl==0.14)
  Downloading pycparser-2.13.tar.gz (299kB)
Installing collected packages: idna, pyasn1, enum34, ipaddress, pycparser, cffi, cryptography, pyopenssl, ndg-httpsclient
  Running setup.py install for idna
  Running setup.py install for pyasn1
  Running setup.py install for enum34
  Running setup.py install for pycparser
  Running setup.py install for cffi
  Running setup.py install for cryptography
  Running setup.py install for pyopenssl
  Running setup.py install for ndg-httpsclient
Successfully installed cffi-1.0.3 cryptography-0.9 enum34-1.0.4 idna-2.0 ipaddress-1.0.7 ndg-httpsclient-0.4.0 pyasn1-0.1.7 pycparser-2.13 pyopenssl-0.14
+ export COMPOSE=docker-compose
+ COMPOSE=docker-compose
+++ pwd
++ basename /var/snap-ci/repo/tests/composer
+ export COMPOSE_PROJECT_NAME=composer-a71ac4f39281a9571a2b5da1284ab1c05da40646
+ COMPOSE_PROJECT_NAME=composer-a71ac4f39281a9571a2b5da1284ab1c05da40646
+ trap cleanup EXIT
+ docker-compose --version
docker-compose 1.2.0
+ docker-compose build
test1 uses an image, skipping
test2 uses an image, skipping
test uses an image, skipping
+ docker-compose up -d
SSL error: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]
+ cleanup
+ docker-compose kill
SSL error: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

ํŠนํžˆ ์˜ค๋ฅ˜ (์ƒˆ๋กœ์šด ๊ฒƒ์œผ๋กœ ๋ณด์ž„)์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

/var/go/py-virtualenv2.7/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

์ง€๊ธˆ๊นŒ์ง€ ๋‚ด ๋ฐœ๊ฒฌ์„ ๋ธŒ๋ ˆ์ธ ๋คํ”„ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/docker/compose/issues/1484 ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

# 1474์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. SSL ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์‹œ๋„ํ•ด๋ณด์„ธ์š”.

http://cl.ly/3W3a2S3t2c32/download/docker-compose-Linux-x86_64
http://cl.ly/0i00310l3x27/download/docker-compose-Darwin-x86_64

+ curl -L http://cl.ly/3W3a2S3t2c32/download/docker-compose-Linux-x86_64
+ /usr/bin/docker-compose --version
docker-compose version: 1.3.0rc1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013

+ /var/go/docker-compose up -d
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

@ jsh2134 pyOpenSSL์„ 0.14์— ์ •ํ™•ํžˆ ๊ณ ์ •ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@kretz ๋‹ต๋ณ€์— +1 :)

+1 ๋™์ผํ•œ ๋ฌธ์ œ :( osx์—์„œ docker๊ฐ€ ์™„์ „ํžˆ ์†์ƒ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

@coderfi ์†”๋ฃจ์…˜์ด ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค .Windows 7 docker 1.7 Cygwin ๋ฐ Docker-compose๊ฐ€ Cygwin์—์„œ pip๋ฅผ ํ†ตํ•ด ์„ค์น˜๋จ

docker-machine์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ํ•˜๋Š” Centos7 VM์˜ ๋ณ€ํ˜• ์˜ค๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

[ root @ xxxx cm] # docker-compose ps
SSL ์˜ค๋ฅ˜ : ์ ์ ˆํ•œ commonName ๋˜๋Š” subjectAltName ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ผ์‹œ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ ์•„์›ƒํ•˜๊ณ  ssh๋ฅผ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜๋ฉด ์ž ์‹œ ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ํ•ญ์ƒ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

[ root @ xxxx cm] # python -c 'import ssl; print (ssl.OPENSSL_VERSION) '
OpenSSL 1.0.1e-fips 2013 ๋…„ 2 ์›” 11 ์ผ

[ root @ xxxx cm] # Docker ๋ฒ„์ „
ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „ : 1.6.2
ํด๋ผ์ด์–ธํŠธ API ๋ฒ„์ „ : 1.18
Go ๋ฒ„์ „ (ํด๋ผ์ด์–ธํŠธ) : go1.4.2
Git ์ปค๋ฐ‹ (ํด๋ผ์ด์–ธํŠธ) : ba1f6c3 / 1.6.2
OS / Arch (ํด๋ผ์ด์–ธํŠธ) : linux / amd64
์„œ๋ฒ„ ๋ฒ„์ „ : swarm / 0.2.0
Go ๋ฒ„์ „ (์„œ๋ฒ„) : go1.3.3
Git ์ปค๋ฐ‹ (์„œ๋ฒ„) : 48fd993
OS / Arch (์„œ๋ฒ„) : linux / amd64

[ root @ xxxx cm] # docker-compose --version
๋„์ปค ์ž‘์„ฑ 1.2.0

๋‚ด ํ™˜๊ฒฝ์—์„œ ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ์ผ๋ถ€ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” boot2docker๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. bash ๋ช…๋ น ์ค„์—์„œ ๋ฐ”๋กœ ๋„์ปค 1.6.2๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”. ๋‚˜๋Š” ๊ทธ ์›์ธ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์‹ค์ œ๋กœ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” pip / brew / newst ๋ฒ„์ „์œผ๋กœ compose๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋“ฑ ๋งŽ์€ ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. openssl์ด 0.x 1.0.2x ๋ฒ„์ „ ๋“ฑ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ถ”์‹  : ์ €๋Š” boot2docker๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” vagrant๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค๊ณ  ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Docker ๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•˜๋Š” ์ž์ฒด VM์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๊ทธ๊ฒƒ์€ ๋„์ปค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ฌธ์ œ๋Š” ๋‚ด ์ธ์ฆ์„œ์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

>>> docker run hello-world
Hello from Docker.
[...]
>>> docker-compose up
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
>>> docker-compose -v
docker-compose version: 1.3.1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014
>>> docker -v
Docker version 1.6.2, build 7c8fca2

ํ•œ ๋ฒˆ์—์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

/usr/local/Cellar/fig/1.3.1/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
SSL error: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

์—ฌ๊ธฐ๋ฅผ ์ฝ๊ณ  ์ œ์•ˆ ๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ ํ•œ ํ›„ :

https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning

docker-compose์˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

[ root @ xxx cm] # docker-compose up -d
/usr/lib/python2.7/site-packages/requests/packages/urllib3/connection.py:251 : SecurityWarning : Certificate has no subjectAltName , fall back to check for commonName for ์ง€๊ธˆ. ์ด ๊ธฐ๋Šฅ์€ ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ฑฐ๋˜๊ณ  RFC 2818์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/shazow/urllib3/issues/497์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
๋ณด์•ˆ ๊ฒฝ๊ณ 
SSL ์˜ค๋ฅ˜ : ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ 'xx.xx.xx.xx'๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ ์—†์Œ

(์ ์„ ์œผ๋กœ ํ‘œ์‹œ๋œ ์ฟผ๋“œ๋Š” ์Šค์›œ ๋งˆ์Šคํ„ฐ / ๋„์ปค ํ˜ธ์ŠคํŠธ์ž…๋‹ˆ๋‹ค).

์ธ์ฆ์„œ๋ฅผ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ถ€๋ก : ์ธ์ฆ์„œ๋Š” "docker-machine create"์— ์˜ํ•ด ์ด๋Ÿฌํ•œ VM์— ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถˆ์ถฉ๋ถ„ํ•˜๊ฒŒ ์ƒ์„ธํ•œ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„์ปค ๋จธ์‹ ์˜ ๋ฒ„๊ทธ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์˜ค๋ฅ˜๋Š” docker-machine์—์„œ ๋งŒ๋“  Docker ํ˜ธ์ŠคํŠธ์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SSL ์ธ์ฆ์„œ๊ฐ€ ์ œ๋Œ€๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋ˆ„๊ตฌ๋“ ์ง€์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‚˜ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ง€๊ธˆ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„์˜ ์ฐจ๋‹จ์ œ์ž…๋‹ˆ๋‹ค : /

@prologic ๋ฐ”์ด๋„ˆ๋ฆฌ ๋˜๋Š” Pip์ด ์„ค์น˜๋œ Compose์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ํ›„์ž์˜ ๊ฒฝ์šฐ requests[security] ๋„ ์„ค์น˜ํ•ด๋ณด์‹ญ์‹œ์˜ค.

@aanand ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€๋ณด๊ณ  ํ•  ๊ฒƒ์ด๋‹ค!

@prologic ์šฐ๋ฆฌ๋Š” ํŒŒ์ด์ฌ์˜ ๋ฒ„๊ทธ๊ฐ€ ๋งŽ์€ SSL ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  requests[security] ๋ฅผ ํŒจํ‚ค์ง•ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” # 1530์˜ ๋…ธ๋ ฅ์„ ์ถ”์ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@aanand ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค :)

@coderfi ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ

@aanand 6 ์›” 2 ์ผ ๋นŒ๋“œ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋ฒ„๊ทธ๋ฅผ ์—†์• ๋Š” ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค.

@neilsarkar ๋‚˜๋Š” ์ฐฐ์Šค ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๋‹น์‹ ์˜ ์˜๊ฒฌ์€ ๋‚˜๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. : +1 :

์ €๋Š” OS X 10.9.5๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

# โžœ  openssl version
# OpenSSL 1.0.2d 9 Jul 2015

โžœ  pyenv local system # switch to built-in python 2.7.5 for current directory
# โžœ  python --version
# Python 2.7.5
# โžœ  python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
# OpenSSL 0.9.8zd 8 Jan 2015

# โžœ  docker-compose --version
# docker-compose version: 1.3.1
# CPython version: 2.7.5
# OpenSSL version: OpenSSL 0.9.8zd 8 Jan 2015

# โžœ  docker-compose ps
# /usr/local/Cellar/fig/1.3.1/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
#   InsecurePlatformWarning
# Name   Command   State   Ports
# ------------------------------

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :

246 : 253 ์ค„์— ์ฃผ์„ ์ฒ˜๋ฆฌ
/usr/local/Cellar/fig/1.3.1/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/connection.py

์ด๊ฒƒ์€ ๋ณด์•ˆ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ brew link --force openssl์„ ์ง€์ •ํ•˜๋”๋ผ๋„ fig / docker-compose๋Š” ์—ฌ์ „ํžˆ / usr / bin / openssl์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ sudo mv /usr/bin/openssl /usr/bin/openssl_old
$ brew link --force openssl OR brew unlink openssl && brew link --force openssl

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋” ์ด์ƒ ์„ฑ๊ฐ€์‹  ๋ฉ”์‹œ์ง€๋ฅผ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, brew fig / docker-compose recipe๋Š” ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ pyenv ๋˜๋Š” brew๋ฅผ ํ†ตํ•ด ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๋”๋ผ๋„ brew install fig / docker-compose๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ openssl lib๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ง์žฅ ๋‚ด MAC์—์„œ pyenv install 2.7.8, easy_install pip ๋ฐ pip install docker-compose๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ง‘์—์žˆ๋Š” ๋‚ด Mac์—์„œ "๋‘˜ ๋‹ค ์š”์„ธ๋ฏธํ‹ฐ๋ฅผ ์‹คํ–‰ ์ค‘"์ด๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ณ„์† ํŒŒ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@dtunes- ๊ทผ๋ณธ ์›์ธ ( @aanand ์œ„์—์„œ ์ฐธ์กฐ)์€ https://github.com/boot2docker/boot2docker/issues/808์ž…๋‹ˆ๋‹ค. system-python / homebrew-python์€ ์ƒˆ๋กญ๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ OpenSSL์— ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ถ‰์€ ์ฒญ์–ด์ž…๋‹ˆ๋‹ค.

๋„ค, ๊ทธ ํ‹ฐ์ผ“์„ ๋ดค์–ด์š”. ๋‚˜๋ฅผ ๊ดด๋กญํžˆ๋Š” ๊ฒƒ์€ ์ง์žฅ์—์„œ Mac์—์„œ ์œ„์˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•œ ํ›„ ํšจ๊ณผ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ / usr / bin / openssl์„ / usr / bin / openssl_old๋กœ ์ด๋™ํ•˜๊ณ  home brew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  openssl์„ ์„ค์น˜ํ•˜๊ณ  ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋•Œ์—๋งŒ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

~ $ brew install pyenv
~ $ pyenv install 2.7.8
~ $ pyenv global 2.7.8
~ $ easy_install pip
~ $ pip install docker-compose

์ด๊ฒƒ์€ ์ง์žฅ์—์„œ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ์ง‘์˜ Mac์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ˆ˜ ํ•œ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ๋ณด๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@dtunes- ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๋ฉด ์ž˜๋ชป๋œ OpenSSL์— ๋Œ€ํ•ด ๋นŒ๋“œ ๋œ ์บ์‹œ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์ด ๋‹ค์‹œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋„๋ก ~/Library/Caches/pip ๋ฅผ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@glyph ๋Š” ๋‹ค์Œ ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค .

๊ทผ๋ณธ ์›์ธ ( @aanand ์œ„์—์„œ ์ฐธ์กฐ)์€ boot2docker / boot2docker # 808์ž…๋‹ˆ๋‹ค. system-python / homebrew-python์€ ์ƒˆ๋กญ๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ OpenSSL์— ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ถ‰์€ ์ฒญ์–ด์ž…๋‹ˆ๋‹ค.

@glyph ๋˜๋Š” @aanand , # 1474์—์„œ ๋ณ‘ํ•ฉ ๋œ @aanand ์˜ ์ˆ˜์ • (ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)์ด ๊นจ์ง„ b2d๋ฅผ ์ˆ˜์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•ฉ๋‹ˆ๊นŒ? @aanand , boot2docker / boot2docker # 808 ์ฃผ์†Œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •๋˜๋ฉด # 1474๋ฅผ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๋‹ค์Œ ์•”ํ˜ธํ™” ๋ฆด๋ฆฌ์Šค ( this ๋ฐ this ์ฐธ์กฐ)์— ํฌ๋ง์„ ๋‘๋Š” ๊ฒƒ๋„ ๋ถ‰์€ ์ฒญ์–ด์ž…๋‹ˆ๊นŒ?

@aanand ๋Š” ๋‹ค์Œ ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค .

docker-machine์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ ๋œ Boot2Docker VM์— ๋Œ€ํ•ด์„œ๋Š”์ด ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. boot2docker ๋ช…๋ น์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ ๋œ VM์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@ehazlett ์ผ๋‹ค :

์ด๊ฒƒ์€ b2d์˜ ์ธ์ฆ์„œ ์ƒ์„ฑ์ด VM์— ์žˆ๊ณ  ์‹œ์Šคํ…œ์ด ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜คํ•ด๋ฅผ ๋ฐ›์•˜์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ํ˜ธ์ŠคํŠธ ์ธก Python / OpenSSL ์กฐํ•ฉ์„ ๋น„๋‚œํ•˜๋Š” ์ˆ˜๋‹ค์Ÿ์ด๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ์›์ธ์ด b2d์™€ ํ•จ๊ป˜ ๋ฐฐํฌ ๋œ ์†์ƒ๋œ OpenSSL ์ธ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ Compose์˜ ํ˜ธ์ŠคํŠธ ์ธก OpenSSL์ด ๋น„์Šทํ•˜๊ฒŒ ์†์ƒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ํ˜ธ์ŠคํŠธ ์ธก ์™œ๊ณก์€ (์˜ˆ) Vagrant๋ฅผ ํ†ตํ•ด b2d๋ฅผ ์‹คํ–‰ํ•˜๊ณ  Compose ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค (์˜ˆ : docker / docker-py # 465 ์ฐธ์กฐ ).

์ด ์ฃผ์„์ด boot2docker / boot2docker # 808์—์„œ ๋” ์ ์ ˆํ•˜๋‹ค๋ฉด, ๊ฑฐ๊ธฐ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Homebrew ๋ฉ”์ธํ…Œ์ด๋„ˆ์ด๊ณ  Glyph๊ฐ€ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋„์™”์Šต๋‹ˆ๋‹ค.

boot2docker๊ฐ€ ์ƒ์„ฑ ํ•œ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ์ œ๋ชฉ ๋ฐ ๋ฐœ๊ธ‰์ž DN์€ /O=Boot2Docker ๋กœ ๋™์ผํ•˜๊ฒŒ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์‹ค์ œ๋กœ CA ์ธ์ฆ์„œ์— ์˜ํ•ด ์„œ๋ช…๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ AFAICT OpenSSL 1.0.2๋Š”์ด ์ •๋ณด (์ฆ‰, ๋™์ผํ•œ ์ฃผ์ฒด ๋ฐ ๋ฐœ๊ธ‰์ž DN)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ณต๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ๋Œ€ํ•ด ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ํ™•์ธํ•˜๋Š” ๋Œ€์‹  ์ž์ฒด ์„œ๋ช… ๋œ ๊ฒƒ์œผ๋กœ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. CA ์ธ์ฆ์„œ. 1.0.2 ์ด์ „์˜ OpenSSL ๋ฒ„์ „์€ ์ œ๊ณต๋œ CA ์ธ์ฆ์„œ์— ๋Œ€ํ•ด ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๋ฐ CA ์ธ์ฆ์„œ์— ๊ณ ์œ  ํ•œ ์ฃผ์ œ DN์„ ์ œ๊ณตํ•˜๋ฉด (์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ๊ณ ์œ  ํ•œ ์ฃผ์ œ ๋ฐ ๋ฐœ๊ธ‰์ž DN์„ ๊ฐ–๋„๋ก) ์ธ์ฆ์„œ๊ฐ€ ๋ชจ๋“  OpenSSL ๋ฒ„์ „์—์„œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ( ์ด X.509 ์ƒ์กด ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์—ˆ์ง€๋งŒ ๊ด€๋ จ ์‚ฌ์–‘์ด ์•„๋‹Œ) ์˜์‹ฌํ•˜์ง€๋งŒ OpenSSL 1.0.2์˜ ๋™์ž‘์ด ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ OpenSSL ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1474๋Š” ๋‘ ๊ฐ€์ง€ ๋ณ„๊ฐœ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ์†Œ Python ๋ฒ„์ „์„ 2.7.9๋กœ ์„ค์ •ํ•˜๋ฉด urllib3๊ฐ€ InsecurePlatformWarning์„ ๋ฐœํ–‰ํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญ์„ ์™„๋ฃŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜๋ฉด HTTPS ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ ๋ฐœํ–‰๋ฉ๋‹ˆ๋‹ค. Python ๋ฒ„์ „์€ 2.7.9 ์ด์ „์ด๊ณ  PyOpenSSL ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PyOpenSSL์„ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๊ฒƒ๋„ ๋˜‘๊ฐ™์ด ํšจ๊ณผ์ ์ด์ง€๋งŒ ํ† ๋ก ์„ ํ†ตํ•ด PyInstaller์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“  urllib3์˜ InsecurePlatformWarning์€ boot2docker ์ธ์ฆ์„œ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์œผ๋ฉฐ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜์ •ํ•ด๋„์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ตœ๋Œ€ OpenSSL ๋ฒ„์ „์„ 1.0.1j๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. boot2docker ์ธ์ฆ์„œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์ด๊ฒƒ์ด ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์›์ธ์ด b2d์™€ ํ•จ๊ป˜ ๋ฐฐํฌ ๋œ ์†์ƒ๋œ OpenSSL ์ธ ๊ฒฝ์šฐ

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋กœ ์ƒ์„ฑ ๋œ boot2docker ์ธ์ฆ์„œ๋Š” OpenSSL โ‰ฅ 1.0.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋”ฐ๋ผ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. boot2docker์™€ ํ•จ๊ป˜ ๋ฐฐํฌ ๋œ OpenSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

@glyph ๋˜๋Š” @aanand , # 1474์—์„œ ๋ณ‘ํ•ฉ ๋œ @aanand ์˜ ์ˆ˜์ • (ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)์ด ๊นจ์ง„ b2d๋ฅผ ์ˆ˜์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•ฉ๋‹ˆ๊นŒ? @aanand , boot2docker / boot2docker # 808 ์ฃผ์†Œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •๋˜๋ฉด # 1474๋ฅผ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๋‹ค์Œ ์•”ํ˜ธํ™” ๋ฆด๋ฆฌ์Šค (์ด๊ฒƒ๊ณผ ์ด๊ฒƒ์„๋ณด์„ธ์š”)์— ํฌ๋ง์„ ๋‘๋Š” ๊ฒƒ ์—ญ์‹œ ๋ถ‰์€ ์ฒญ์–ด์ž…๋‹ˆ๊นŒ?

๋„ค, ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€์žˆ๋Š” OpenSSL์€ 1.0.2์ด๋ฉฐ, 1.0.1๋กœ ์ œํ•œํ•˜๋ฉด ์ธ์ฆ์„œ ์‹คํŒจ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ํ™•์ธ ๋…ผ๋ฆฌ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ _what_ ๊ทธ๊ฒƒ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ์ธ์ฆ์„œ์— ๊ด€ํ•œ ๊ฒƒ์ธ์ง€ ๋ชจ๋ฅธ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„ˆ๋ฌด ๋ฌด๋”” ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜ํ•œ # 1474๊ฐ€ํ•˜๋Š” ์ผ์ด ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด ๋…์„œ์—์„œ _minimum_ python ๋ฒ„์ „์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  _exact_ ๋ฒ„์ „์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ j์™€ ๋‹ค๋ฅธ 1.0.1์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ฆ‰, 1.0.1์—๋„ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” _ ํ™•์‹คํžˆ _ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๋ฐ CA ์ธ์ฆ์„œ์— ๊ณ ์œ  ํ•œ ์ฃผ์ œ DN์„ ์ œ๊ณตํ•˜๋ฉด (์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ๊ณ ์œ  ํ•œ ์ฃผ์ œ ๋ฐ ๋ฐœ๊ธ‰์ž DN์„ ๊ฐ–๋„๋ก) ์ธ์ฆ์„œ๊ฐ€ ๋ชจ๋“  OpenSSL ๋ฒ„์ „์—์„œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” (์ด X.509 ์ƒ์กด ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์—ˆ์ง€๋งŒ ๊ด€๋ จ ์‚ฌ์–‘์ด ์•„๋‹Œ) ์˜์‹ฌํ•˜์ง€๋งŒ OpenSSL 1.0.2์˜ ๋™์ž‘์ด ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ OpenSSL ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker-machine -์ƒ์„ฑ ๋œ ์ธ์ฆ์„œ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ ์ด ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. OpenSSL์—์„œ์ด ๋™์ž‘์ด ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํšŒ๊ท€๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ๊ฒƒ์€ ์™„๋ฒฝํ•˜๋ฉฐ ์ฃผ์ฒด ๋˜๋Š” ๋ฐœ๊ธ‰์ž๊ฐ€ ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ์กฐ๊ธˆ ํ›‘์–ด ๋ดค๋Š”๋ฐ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ์—๋Š” CA- ์นด๋ฅดํ…” ์‹ ๋ขฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์—†์ด๋Š” ์‹ ๋ขฐํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์ง€์ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด docker-machine VM์˜ ์ธ์ฆ์„œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

...
        Issuer: O=glyph
...
        Subject: O=dev
...

๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ์˜ณ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

docker-machine-generated cert๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  [matching Subject and Issuer DNs]๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

aanand์˜ docker-machine ์ธ์ฆ์„œ์—๋„ ๊ณ ์œ  ํ•œ DN์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://gist.github.com/aanand/3d865623481ba8ae66ee#file -docker-machine-log-L30-L32

์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ๊ฒƒ์€ ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ํ•œ ์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. OpenSSL์— ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๋„๋ก ์ง€์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. OpenSSL์— ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ ํ•œ CA๋ฅผ ์‹ ๋ขฐํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

OpenSSL์—์„œ์ด ๋™์ž‘์ด ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํšŒ๊ท€๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

IANAL,ํ•˜์ง€๋งŒ ๋‚ด ์ถ”๋ก ์€ "์—„๊ฒฉํ•œ ์ˆ˜์ค€์—์„œ [์ž์ฒด ์„œ๋ช…]์€ ์ธ์ฆ์„œ์˜ ๋ฐœ๊ธ‰์ž์™€ ์ฃผ์ œ ํ•„๋“œ๊ฐ€ ๋™์ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค."๋ผ๋Š” ์–ธ์–ด์—์„œ ํŒŒ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด boot2docker ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. OpenSSL์ด boot2docker ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์„œ๋ช… ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ช…์‹œ ์ ์œผ๋กœ ์‹ ๋ขฐ๋˜์ง€ ์•Š์•„ ์œ ํšจ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— CA ์ธ์ฆ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์™„์ „ํ•œ ์‹ ๋ขฐ ์ฒด์ธ์„ ๊ตฌ์ถ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์—„๊ฒฉํžˆ ์˜ณ๊ฑฐ๋‚˜ ์š”๊ตฌ๋˜๋Š” ํ–‰๋™์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ๊ฒฐ์ •ํ•  ์ž๊ฒฉ์ด ์—†์ง€๋งŒ "ํ•ฉ๋ฆฌ์ "์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐœ๊ตด ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ # 1474๊ฐ€ํ•˜๋Š” ์ผ์ด ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด ๋…์„œ์—์„œ ์ตœ์†Œ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ j์™€ ๋‹ค๋ฅธ 1.0.1์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ 1.0.1์—๋„ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋Š” ํ™•์‹คํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. boot2docker์˜ ์ธ์ฆ์„œ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š” OpenSSL 1.0.2๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ทธ ๋ถ€๋ถ„์€ ์ตœ์†Œํ•œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  OpenSSL 1.0.1 in.

@tdsmith , ์˜คํ•ด์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์‚ฌ๊ณผ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @glyph , ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

FWIW, ๋‚˜๋Š” @tdsmith ์˜ ์ด๋ก ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  Issuer ๋ฐ Subject ๋Œ€ํ•œ ๊ณ ์œ  ํ•œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด generate_cert (์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค, ์šฉ์„œํ•˜์„ธ์š”)๋ฅผ ํ˜„์žฌ generate_cert ์—์„œ ์ƒ์„ฑ ๋œ ์ธ์ฆ์„œ๋กœ b2d๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์–ป์€ ๊ฒฐ๊ณผ์™€ ํ•ดํ‚น ๋œ ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

0.9.8zd orig generate_cert (0.1)์—์„œ ์ž‘๋™

% /usr/bin/openssl version
OpenSSL 0.9.8zd 8 Jan 2015
% /usr/bin/openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
depth=1 /O=Boot2Docker
verify return:1
depth=0 /O=Boot2Docker
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2Docker
-----BEGIN CERTIFICATE-----
MIIC/TCCAeegAwIBAgIRAKt8Sy0ND8z8omBU0uhODVAwCwYJKoZIhvcNAQELMBYx
...
qKFg5oUO9wigoGlwnSjqC/5ZmFRf9B+nWeCUVi/vWl0skOIqCMlDamD8AOVtmtRg
tg==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2Docker
---
Acceptable client certificate CA names
/O=Boot2Docker
---
SSL handshake has read 2554 bytes and written 2188 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 621C9DF6883DA1FAF273408D0C984AC6E1DA33BA44ADA0EBA88BE59490560CFC
    Session-ID-ctx: 
    Master-Key: 39A75DE8551C41241CDBF889A5EF32DC7F86A45C792218B7E380E90627C7D0691BC5FCCAB69154B84142171F866F36C2
    Key-Arg   : None
    TLS session ticket:
    0000 - 77 ca 24 b7 2e 33 6a fc-9d 6e d0 eb aa 0d d5 89   w.$..3j..n......
    ...
    0630 - db 49 35 a1 97                                    .I5..

    Start Time: 1438703085
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE

1.0.2d (MacPorts๋ฅผ ํ†ตํ•ด ์„ค์น˜๋จ)๋Š” orig generate_cert (0.1)์—์„œ ์ž‘๋™ํ•˜์ง€ _ ์•Š์Šต๋‹ˆ๋‹ค _.

% openssl version
OpenSSL 1.0.2d 9 Jul 2015
% openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
depth=0 O = Boot2Docker
verify error:num=18:self signed certificate
verify return:1
depth=0 O = Boot2Docker
verify error:num=21:unable to verify the first certificate
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2Docker
-----BEGIN CERTIFICATE-----
MIIC/TCCAeegAwIBAgIRAKt8Sy0ND8z8omBU0uhODVAwCwYJKoZIhvcNAQELMBYx
...
qKFg5oUO9wigoGlwnSjqC/5ZmFRf9B+nWeCUVi/vWl0skOIqCMlDamD8AOVtmtRg
tg==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2Docker
---
Acceptable client certificate CA names
/O=Boot2Docker
Client Certificate Types: RSA sign, ECDSA sign
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2156 bytes and written 1373 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES256-SHA
    Session-ID: BAE02ACF63C2F4E28C46664CEB8E790DB0F00E8CB75913484BFE88CC215995D2
    Session-ID-ctx: 
    Master-Key: C7227519074A26A51D815655721F18C63932897D731D1BF077B8374F8A021D51EDF2E603386D249ED62127BD71A86048
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket:
    0000 - 14 b0 7a 58 68 91 62 10-14 53 04 cf da 41 63 6e   ..zXh.b..S...Acn
    ...
    0350 - 5f 8e fe fd 9c b0 d0                              _......

    Start Time: 1438703297
    Timeout   : 7200 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
DONE

0.9.8zd ์€ (๋Š”) ํ•ดํ‚น ๋œ generate_cert (0.1.1; ๋†€๋ž์ง€ ์•Š์Œ)

% /usr/bin/openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
depth=1 /O=Boot2DockerCA
verify return:1
depth=0 /O=Boot2Docker
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2DockerCA
-----BEGIN CERTIFICATE-----
MIIC/zCCAemgAwIBAgIRAMLl0tA00F2BDjyktFSD5aEwCwYJKoZIhvcNAQELMBgx
...
jhzP4aW3a8uAdpQXjf8nmJ5Qrq4Xb6yWAezXRdmPWfG1u4neBQKy1Zp64PiBd+0v
1UPu
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2DockerCA
---
Acceptable client certificate CA names
/O=Boot2DockerCA
---
SSL handshake has read 2563 bytes and written 2193 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 1E52C9982BE1F98559529B9E804D330ADD5EC8654EE9F3AFE6139B2AEAB24919
    Session-ID-ctx: 
    Master-Key: 0714B120A52F735C484BF0F6612909CEB5FAF27D5E66B3DDB76DCB32FFE506F70E4BC5EFC42BB19E5CBE6223ACEA5803
    Key-Arg   : None
    TLS session ticket:
    0000 - c4 54 e0 2f 90 68 f2 22-7a c9 ee 2f fb da 25 7a   .T./.h."z../..%z
    ...
    0630 - 5c 95 c6 0a e9 bd 21 70-fd                        \.....!p.
    063a - <SPACES/NULS>

    Start Time: 1438703534
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE

1.0.2d _works (!) _ : tada : : see_no_evil : : hear_no_evil : : speak_no_evil : ํ•ดํ‚น ๋œ generate_cert (0.1.1)

% openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
depth=1 O = Boot2DockerCA
verify return:1
depth=0 O = Boot2Docker
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2DockerCA
-----BEGIN CERTIFICATE-----
MIIC/zCCAemgAwIBAgIRAMLl0tA00F2BDjyktFSD5aEwCwYJKoZIhvcNAQELMBgx
...
jhzP4aW3a8uAdpQXjf8nmJ5Qrq4Xb6yWAezXRdmPWfG1u4neBQKy1Zp64PiBd+0v
1UPu
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2DockerCA
---
Acceptable client certificate CA names
/O=Boot2DockerCA
Client Certificate Types: RSA sign, ECDSA sign
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2899 bytes and written 2111 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES256-SHA
    Session-ID: 0F1A3A0AB7B1E7C1CFD43CED169E730745DEB935C4DBEDDC7CD8AB698ECB8896
    Session-ID-ctx: 
    Master-Key: A48F441FD8677E1602BFB96DC7E9B39D0E9A7241D1C4AF93F3022ACB621C73E16BD69F557FF4428B033B1C07DF5EB0FB
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket:
    0000 - 30 e1 e9 1a 4d e0 48 78-14 22 e8 21 5d 84 e7 6f   0...M.Hx.".!]..o
    ...
    0630 - 27 15 8a 64 ff 2e 24 44-3d d8                     '..d..$D=.

    Start Time: 1438703550
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE

์ฃผ์˜ ์‚ฌํ•ญ

๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์›๋ณธ generate_cert (0.1)์ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์„ ๋•Œ ๋นŒ๋“œ์— ์‚ฌ์šฉ ๋œ golang:1.3-cross Docker ์ด๋ฏธ์ง€๊ฐ€ ํŒจํ‚ค์ง€์— ์•ก์„ธ์Šค ํ•  ์ˆ˜์žˆ์„ ๋•Œ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „ํ™” ssh . ํ•ด๋‹น ํŒจํ‚ค์ง€๋Š” ์ดํ›„ openssh-client ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ดํ‚น ๋œ generate_cert ๋นŒ๋“œ์‹œ ์‚ฌ์šฉ ๋œ OpenSSL ๋ฒ„์ „์€ 1.0.1k ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

% ldd generate_cert-0.1.1-linux-amd64
        linux-vdso.so.1 (0x00007ffd0936c000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007fddefe7f000)
        libc.so.6 => /lib/libc.so.6 (0x00007fddefb11000)
        /lib64/ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x00007fddf009a000)

๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • @tdsmith๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ตœ์‹  ๋ฒ„์ „์˜ OpenSSL์€ Issuer == Subject ๋•Œ ํ˜ผ๋™๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š”
  • OpenSSL์˜ ์ดํ›„ ๋ฒ„์ „์—์„œ ์ด์ „ ๋ฒ„์ „์—์„œ ์ƒ์„ฑ ๋œ ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋„๋ก OpenSSL์—์„œ ๋ณ€๊ฒฝ๋œ ์ธ์ฆ์„œ ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‚ด ํ•ดํ‚น์—†์ด OpenSSL์˜ ์—…๋ฐ์ดํŠธ ๋œ ๋ฒ„์ „์œผ๋กœ generate_cert ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์— ํ• ๊ฒŒ์š”.

๊ทธ๋ž˜์„œ @tdsmith ๊ฐ€ ์˜ณ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ›„ ๋‚ด ํ•ดํ‚น์„ ๋ฐฑ์—… ๋ณด์žฅํ•˜๊ธฐ Issuer <> Subject ,ํ•˜์ง€๋งŒ ์žฌ๊ฑด generate_cert ์—์„œ์˜ OpenSSL ์ตœ์‹  ๋ฒ„์ „๊ณผ golang:1.3-cross , ๊ทธ๊ฒƒ์€์œผ๋กœ ์‹คํŒจ๋กœ ๋Œ์•„ ๊ฐ„๋‹ค ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ตœ์‹  OpenSSL ๋ฒ„์ „ :

0.9.8zd ๋Š” ์—…๋ฐ์ดํŠธ ๋œ OpenSSL์„ ํ†ตํ•ด generate_cert (0.1.2)์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

% /usr/bin/openssl version
OpenSSL 0.9.8zd 8 Jan 2015
% /usr/bin/openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
depth=1 /O=Boot2Docker
verify return:1
depth=0 /O=Boot2Docker
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2Docker
-----BEGIN CERTIFICATE-----
MIIC/TCCAeegAwIBAgIRAIVQ9IAYtPQwnu/FHM8HNS0wCwYJKoZIhvcNAQELMBYx
...
xZ+XhXvepeJ/mBIui1qT3yAMum0Mj1zLAxqCY/qsEU4odsgU9N9DbUGngoIkBCrY
gw==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2Docker
---
Acceptable client certificate CA names
/O=Boot2Docker
---
SSL handshake has read 2554 bytes and written 2188 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: FDE088ECF8D0EB2B36EC909B9A66C9C6770AE31355040761CB35150C5A56E92E
    Session-ID-ctx: 
    Master-Key: 86522F869CDE85C8171EEC3A7CF76FDF26F81AE6162DDDEA7D1C55FD5E49E4BDCA56D827C3BFECBFAD9AA2F71A5A94EE
    Key-Arg   : None
    TLS session ticket:
    0000 - 67 d0 60 8e 54 54 7c 7a-3e 5e 71 97 26 e0 06 2c   g.`.TT|z>^q.&..,
    ...
    0630 - cf 68 86 83 d7                                    .h...

    Start Time: 1438705996
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
DONE

1.0.2d (MacPorts๋ฅผ ํ†ตํ•ด ์„ค์น˜๋จ)๋Š” ์—…๋ฐ์ดํŠธ ๋œ OpenSSL์„ ์‚ฌ์šฉํ•˜๋Š” generate_cert (0.1.2)์—์„œ ์ž‘๋™ํ•˜์ง€ _ ์•Š์Šต๋‹ˆ๋‹ค _.

% openssl version
OpenSSL 1.0.2d 9 Jul 2015
% openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
depth=0 O = Boot2Docker
verify error:num=18:self signed certificate
verify return:1
depth=0 O = Boot2Docker
verify error:num=21:unable to verify the first certificate
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2Docker
-----BEGIN CERTIFICATE-----
MIIC/TCCAeegAwIBAgIRAIVQ9IAYtPQwnu/FHM8HNS0wCwYJKoZIhvcNAQELMBYx
...
xZ+XhXvepeJ/mBIui1qT3yAMum0Mj1zLAxqCY/qsEU4odsgU9N9DbUGngoIkBCrY
gw==
-----END CERTIFICATE-----
---
Server certificate
subject=/O=Boot2Docker
issuer=/O=Boot2Docker
---
Acceptable client certificate CA names
/O=Boot2Docker
Client Certificate Types: RSA sign, ECDSA sign
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2156 bytes and written 1373 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES256-SHA
    Session-ID: C2A8BF01E9B754CBF48C69243091C54DAD19DCF52D285C9379B684A3B333AFDD
    Session-ID-ctx: 
    Master-Key: F8510162517AF4C115A13B7CA9E05E04868B4D78CBFA57B28A5B9616EE6FBED6B7B4FC52C2003EBC5D150FA8BDE95F4C
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket:
    0000 - bc bc 2c 3e 2d b0 92 49-80 c2 c0 df 4f bd fb 84   ..,>-..I....O...
    ...
    0350 - 1e c7 c2 b2 e6 f5 74                              ......t

    Start Time: 1438705985
    Timeout   : 7200 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
DONE

SvenDowideit / generate_cert # 10์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‚ด ํ•ดํ‚น ๋œ generate_cert ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” b2d ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ณต์‹ ์ˆ˜์ •์ด ๋ฆด๋ฆฌ์Šค ๋  ๋•Œ๊นŒ์ง€ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•œ๋‹ค๋ฉด, ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ OpenSSL / Python ๋ฒ„์ „ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ด ํ•  ํ•„์š”์„ฑ์„ ์—†์• ์•ผํ•ฉ๋‹ˆ๋‹ค (์ ์–ด๋„์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ).

@SvenDowideit ํƒœ๊ทธ ์ง€์ •

๋‚˜๋Š” OpenSSL ๋…€์„๋“ค๊ณผ ์•ฝ๊ฐ„์˜ ์ „ํ›„ ๊ด€๊ณ„๋ฅผ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Steve Henson์˜ ์š”์•ฝ์ž…๋‹ˆ๋‹ค.

From: Stephen Henson via RT <[email protected]>
Subject: [openssl.org #3979] New OpenSSL issue: valid certificate fails validation where subject text == issuer text
Date: August 5, 2015 at 04:32:18 PDT
Cc: [email protected]
Reply-To: [email protected]

... The bug is that OpenSSL 1.0.2 is less strict about
what counts as a valid self signed certificate. Before 1.0.2 the certificate
had to have issuer and subject matching, if present AKID==SKID and
keyUsage (if present) had to include keyCertSign. For1.0.2 and later the
keyCertSign check is no longer present.

The attached patch should fix it. Let me know if it works for you.

A workaround (other than making subject != issuer) is to include SKID/AKID in
all certificates.

Regards, Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org

๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” OpenSSL ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด b2d๊ฐ€ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ OpenSSL์„ ํŒจ์น˜ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์–ด๋–ค ํŠน์ • ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋” ์ ์ ˆํ•œ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค (์ฃผ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ = ๋ฐœ๊ธ‰์ž ๋Œ€ ๋ชจ๋“  ์ธ์ฆ์„œ์— SKID / ADID ํฌํ•จ). ๋‚˜๋Š” ๊ทธ ๋ฒ…์„ @SvenDowideit์— ๋„˜๊ธธ ๊ฒƒ์ด๋‹ค. : ์›ƒ์Œ :

๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด (๋‹ค์‹œ ๋ง์”€ ๋“œ๋ฆฌ์ง€๋งŒ,์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ๋‹ค์Œ์€ Steve์˜ OpenSSL ํŒจ์น˜์ž…๋‹ˆ๋‹ค.

diff --git a/crypto/x509v3/v3_purp.c b/crypto/x509v3/v3_purp.c
index 1f9296a..7a0130a 100644
--- a/crypto/x509v3/v3_purp.c
+++ b/crypto/x509v3/v3_purp.c
@@ -63,6 +63,7 @@
 #include <openssl/x509_vfy.h>

 static void x509v3_cache_extensions(X509 *x);
+static int check_ca(const X509 *x);

 static int check_ssl_ca(const X509 *x);
 static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
@@ -493,7 +494,7 @@ static void x509v3_cache_extensions(X509 *x)
     if (!X509_NAME_cmp(X509_get_subject_name(x), X509_get_issuer_name(x))) {
         x->ex_flags |= EXFLAG_SI;
         /* If SKID matches AKID also indicate self signed */
-        if (X509_check_akid(x, x->akid) == X509_V_OK)
+        if (X509_check_akid(x, x->akid) == X509_V_OK && check_ca(x) == 1)
             x->ex_flags |= EXFLAG_SS;
     }
     x->altname = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);

์ „์ฒด ๊ธฐ๋ก : http://rt.openssl.org/Ticket/History.html?user=guest&pass=guest&id=3979.

์ž ๊น ... _less_ ์—„๊ฒฉํ•œ? ๋” ์—„๊ฒฉํ•œ ๊ฒ€์‚ฌ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ๊ณณ์—์„œ _less_ ์—„๊ฒฉํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํŒจํ•ฉ๋‹ˆ๊นŒ?

์ž ๊น ... _less_ ์—„๊ฒฉํ•œ? ๋” ์—„๊ฒฉํ•œ ๊ฒ€์‚ฌ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ๊ณณ์—์„œ _less_ ์—„๊ฒฉํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํŒจํ•ฉ๋‹ˆ๊นŒ?

๋„ค, ๊ทธ ์–ธ์–ด ์„ ํƒ์—๋„ ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๋ฉด, ๊ทธ๋Š” ๋งŽ์€ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ๋กœ ๋” ๋งŽ์€ ์ธ์ฆ์„œ๋ฅผ ์ž˜๋ชป ์“ธ์–ด ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์ฆ‰, ์ž์ฒด ์„œ๋ช… ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ _ ์•Š๋Š” _ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋œ ์—„๊ฒฉํ•จ). ํ•˜์ง€๋งŒ ๋‹น์‹  ๋ง์ด ๋งž์•„์š”. ์ด์ƒํ•œ ๊ตฌ์ ˆ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” OpenSSL ์†Œ์Šค๋ฅผ ํƒ๊ตฌํ•˜๋Š” ๋ฐ ๊ทธ๋‹ค์ง€ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋งŽ์€ ๊ณณ์—์„œ ๊ทธ๊ฒƒ๋“ค์„ ์ƒ๋‹นํžˆ ๋šซ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด "ํŠน๋ณ„ํ•œ"์‚ฌ๊ณ  ๋ฐฉ์‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :์ด๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ณ  ์›ƒ๋‹ค:

๋‚˜๋Š” OpenSSL ์†Œ์Šค๋ฅผ ํƒ๊ตฌํ•˜๋Š” ๋ฐ ๊ทธ๋‹ค์ง€ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋งŽ์€ ๊ณณ์—์„œ ๊ทธ๊ฒƒ๋“ค์„ ์ƒ๋‹นํžˆ ๋šซ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด "ํŠน๋ณ„ํ•œ"์‚ฌ๊ณ  ๋ฐฉ์‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณผ์†Œ ํ‘œํ˜„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค : wink :.

์–ด์จŒ๋“  OpenSSL ์ง์›์—๊ฒŒ ๋ฌธ์˜ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ํ•ด๊ฒฐ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œํŽธ, b2d์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์€ ์ผ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. compose๊ฐ€ ์—ฌ๊ธฐ์„œ ํ•  ์ผ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

pip install requests[security]

@iffy ๊ทธ๊ฒƒ์€ ๋ถ‰์€ ์ฒญ์–ด์ž…๋‹ˆ๋‹ค; ๋‹ค๋ฅธ OpenSSL์— ๋งํฌ ๋œ ์บ์‹œ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ ๋œ PR์ด boot2docker / boot2docker # 1029๋กœ ์ œ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ (@posita์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!)์€ ์ตœ์‹  ๋ฒ„์ „์˜ boot2docker์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด :

$ boot2docker upgrade
$ boot2docker delete
$ boot2docker init
$ boot2docker up

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋‹ค์‹œ๋ณด๊ณ ํ•˜์‹ญ์‹œ์˜ค.

๋˜๋Š” ์ƒˆ๋กœ์šด Docker Toolbox์˜ ์ผ๋ถ€๋กœ ํ‘œ์ค€์œผ๋กœ ์ œ๊ณต๋˜๋Š” Docker Machine์œผ๋กœ ์ „ํ™˜ํ•˜์‹ญ์‹œ์˜ค.

์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค ...

โฏ openssl version && docker-compose --version && docker-machine --version && python --version
OpenSSL 1.0.2d 9 Jul 2015
docker-compose version: 1.4.0
docker-machine version 0.4.1 (HEAD)
Python 2.7.10

โฏ docker-compose ps
/usr/local/Cellar/fig/1.4.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Name   Command   State   Ports
------------------------------

@chiefy ๋„์ปค ์ž‘์„ฑ ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด๋ณด๊ณ ์žˆ๋Š” ๊ฒฝ๊ณ ๋Š” ๋ฌดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋ณด์ง€ ์•Š์œผ๋ ค๋ฉด OS X 10.10.5๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@tdsmith ๋Š” ๋‚˜์—๊ฒŒ ๋ฌดํ•ดํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋‚ด OCD๋ฅผ ๋ฏธ์น˜๊ฒŒ

brew๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์ œ๊ฑฐํ•˜๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. brew remove --force python

Brew ๋ฒ„์ „์„ ์ œ๊ฑฐํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ Python 2.7.10 ์žˆ๊ณ  ์—ฌ์ „ํžˆ
SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581) ์˜ค๋ฅ˜.

๋‹ค์Œ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

OpenSSL 0.9.8zg 14 July 2015
docker-compose version: 1.4.0
docker-machine version 0.4.1 (e2c88d6)
Python 2.7.10

ํ—‰
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ–ˆ์Šต๋‹ˆ๊นŒ?

docker-compose ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์•ˆ ์ธ์‚ฌ,

์•ˆ๋…•ํ•˜์„ธ์š”.
์•„๋‹ˆ. ๋‘ Mac (10.9.x ๋ฐ 10.10.x)์—์„œ ๋ณ€๊ฒฝ์—†์ด ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด docker-compose ์ผ์ด๊ณ  ํŒŒ์ด์ฌ ์ผ FWIW์˜ ๋” ๋งŽ์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ—‰
๋™์˜ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ณ€ํ˜•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด๋ฏธ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ €๋Š” ์•„๋‹™๋‹ˆ๋‹ค. :)

brew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ด์ฌ์„ ํ•œ ๋ฒˆ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ์‹œ์Šคํ…œ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ณ€ํ˜•์œผ๋กœ ๋„์ปค๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ (๋„์ปค ๋„๊ตฌ ์ƒ์ž ๋‹ค์šด๋กœ๋“œ)
  2. ์–‘์กฐ ์ž์ฒด์—์„œ

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
image

๋ˆ„๊ตฌ๋“ ์ง€์ด ํ–‰๋™์„ ๊ทน๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํฌ๊ด„์  ์ธ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์•ˆ ์ธ์‚ฌ,

@PavelPolyakov- ๋ฒ„๊ทธ๋Š” boot2docker (๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” docker-machine)๊ฐ€ ํŒŒ์ด์ฌ์˜ SSL ์ง€์›์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ์ผ๋ถ€ ์ธ์ฆ์„œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž˜๋ชป๋œ ์˜ค๋ž˜๋œ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์‹œ์ ์—์„œ ํ˜„์žฌ ๋ฒ„์ „์˜ docker-machine์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์œ ํ•œ ๋ชจ๋“  dev VM์„ ๋‹ค์‹œ ํ”„๋กœ๋น„์ €๋‹ํ•˜์—ฌ ์ƒˆ SSL ์ธ์ฆ์„œ๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ~/.docker ์˜†์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PavelPolyakov ๋ฐ @chiefy , @glyph ์˜ ์กฐ์–ธ ์™ธ์—๋„ ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( boot2docker ํ™˜๊ฒฝ์„ ์™„์ „ํžˆ ์žฌ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ).

% mv ~/.docker ~/.docker.bak
% ssh docker@[boot2dockerip]
docker@[boot2dockerip]'s password: [typically "tcuser"]
...
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker<strong i="10">@boot2docker</strong>:~$ rm -frv ~/.docker
...
docker<strong i="11">@boot2docker</strong>:~$ sudo -s
root<strong i="12">@boot2docker</strong>:/home/docker# rm -v /var/lib/boot2docker/tls/*
...
root<strong i="13">@boot2docker</strong>:/home/docker# shutdown -h now
...

[boot2dockerip] ๋Š” VM ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ : Vagrant๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ vagrant ssh ). ๊ทธ๋Ÿฐ ๋‹ค์Œ boot2docker ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  SSL ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

@glyph

์กฐ์–ธ์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ๋Š” ๋„์ปค ๋จธ์‹ ์„ ์žฌ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker & co๋ฅผ ์„ค์น˜ํ•  ๋•Œ :
brew install docker docker-machine docker-compose

๊ทธ๋Ÿฌ๋ฉด default ๋จธ์‹ ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  docker-machine create ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

* .pkg ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ docker-toolbelt๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋จธ์‹ ์ด ์ƒ์„ฑ๋˜์ง€๋งŒ SSL ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์‹ฌ์ง€์–ด ์‹œ๋„ํ–ˆ๋‹ค :

docker-machine regenerate-certs default

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@posita
์กฐ์–ธ์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ท€ํ•˜์˜ ๊ฐ€์ด๋“œ์—์„œ mv ~/.docker ~/.docker-bak ์—๊ฒŒ ์ œ์•ˆํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒํ•˜๋ฉด ํŒŒ์ผ์ด ์ด๋™๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์˜ˆ, ์ปดํ“จํ„ฐ์— ๋กœ๊ทธ์ธํ•˜์—ฌ tls/* ๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ์ข…๋ฃŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@๋ชจ๋‘
docker๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ (docker-compose ์ž‘๋™์œผ๋กœ), brew install ๋˜๋Š” toolbelt .pkg๋ฅผ ํ†ตํ•ด์ž…๋‹ˆ๊นŒ?
๋‚ด docker-machine์—์žˆ๋Š” ์ธ์ฆ์„œ๊ฐ€ ํŒŒ์ด์ฌ์—์„œ ์œ ํšจํ•˜๊ณ  ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ™•์‹  ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ brew๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์ด ํŒŒ์ด์ฌ๊ณผ openssl์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„์›€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ,

@PavelPolyakov- docker-machine ์—๋Š” "๊ธฐ๋ณธ"์ปดํ“จํ„ฐ๋ผ๋Š” ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค. docker-machine create --driver virtualbox my-docker-machine ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PavelPolyakov ์ผ๋‹จ ์™„๋ฃŒ๋˜๋ฉด eval "$(docker-machine env my-docker-machine)" ๋˜๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ์‹œ์Šคํ…œ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@glyph
๋งž์Šต๋‹ˆ๋‹ค. brew ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋น ์ง„ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์ด default ๋จธ์‹ ์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ–ˆ์Šต๋‹ˆ๋‹ค (* .pkg์—์„œ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ์ˆ˜ํ–‰ ํ•œ ๊ฒƒ๊ณผ ๋™์ผ).

๊ทธ๋Ÿฌ๋‚˜ ํ‰์†Œ์™€ ๊ฐ™์ด ๋๋‚ฉ๋‹ˆ๋‹ค.
image

:(

๊ฐ€์ด๋“œ์—์„œ ~ / .docker ~ / .docker-bak-์–ด๋–ค ์ด์œ ๋กœ? ์ด๋ ‡๊ฒŒํ•˜๋ฉด ํŒŒ์ผ์ด ์ด๋™๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@PavelPolyakov , ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” docker-machine ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ™˜๊ฒฝ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ถ”์ธกํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ, ์‹œ์Šคํ…œ์— ๋กœ๊ทธ์ธํ•˜์—ฌ tls/* ๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ์‹œ์Šคํ…œ์„ ์ข…๋ฃŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

docker-machine restart ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋‚ด ์˜๊ฒฌ์€ Vagrant์™€ ํ•จ๊ป˜ boot2docker ์„ (๋ฅผ) ์‹คํ–‰ ํ•œ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. docker-machine ์ž˜ ์ ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @glyph ๊ฐ€ ํ•ด๋‹น ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ๊ฒฝํ—˜์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ์˜ ์ œ์•ˆ์„ ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

docker๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ (docker-compose ์ž‘๋™), brew install ๋˜๋Š” toolbelt .pkg๋ฅผ ํ†ตํ•ด?

์ด๊ฒƒ์€ ์–ด๋Š ์ •๋„ ์™ธ๋ถ€ (์™€ ์ธ์ฆ์„œ ๋ฌธ์ œ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š”์ด ๋ฌธ์ œ์˜ ๋ฒ”์œ„ ์ธ boot2docker ์— ๋‚˜ํƒ€๋‚œ ๋ฐ”์™€ ๊ฐ™์ด docker-compose )ํ•˜์ง€๋งŒ, OS X์—์„œ, ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋นŒ๋“œ .

@PavelPolyakov , ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ?

docker-machine create --driver virtualbox shiny-new-machine-74d5a19e
eval $( docker-machine env shiny-new-machine-74d5a19e )
docker-compose build

๋‹ค์Œ์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ํ‘œ์‹œ๋˜๋Š” boot2docker ์˜ ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

docker-machine ssh shiny-new-machine-74d5a19e

shiny-new-machine-74d5a19e ๋Š” ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ํ•œ ์›ํ•˜๋Š”๋Œ€๋กœ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ฆ‰, ์œ„ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— docker-machine ls ๋ฅผ ์ˆ˜ํ–‰ ํ•  ๋•Œ ์ด๋ฆ„์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค .).

@posita
image
image

ํ  .... : ํ˜ผ๋ž€ : @PavelPolyakov , ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?

eval $( docker-machine env shiny-new-machine-74d5a19e ) # probably unnecessary if you're still in the same shell as above
which openssl
openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null

@posita
๊ณ„์† ๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
image

openssl s_client -showcerts -connect "${DOCKER_HOST#tcp:\/\/}" -key "${DOCKER_CERT_PATH}/key.pem" -cert "${DOCKER_CERT_PATH}/cert.pem" -CAfile "${DOCKER_CERT_PATH}/ca.pem" -tls1 </dev/null
http://pastebin.com/Y9ZqfTVG

๋‹ค๋ฅธ OSX ์‹œ์Šคํ…œ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ์ตœ์‹  ์—…๋ฐ์ดํŠธ (os ๋ฐ brew ํŒจํ‚ค์ง€)์™€ ํ•จ๊ป˜ SSL๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค.

image

@PavelPolyakov , ์ €๋Š” openssl s_client ... ๋คํ”„์—์„œ ์ด๊ฒƒ์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :

...
Certificate chain
 0 s:/O=shiny-new-machine-74d5a19e
   i:/O=PavelPolyakov
...

๋‹ค์Œ์€ boot2docker ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹ˆ๋ฉฐ (ํ˜„์žฌ) ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

...
Certificate chain
 0 s:/O=Boot2Docker
   i:/O=Boot2Docker
...

๋” ๋งŽ์€ ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•ด๋„ docker-machine ๊ฐ€ ๊ฐ€์ƒ ๋จธ์‹ ์„ ํ”„๋กœ๋น„์ €๋‹ ํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฎ์–ด ์“ฐ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ openssl ํ˜ธ์ถœ์ด ํšจ๊ณผ๊ฐ€์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด ๋ฌธ์ œ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋ฉฐ docker-compose ์ด ์‹คํŒจํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. : ํ˜ผ๋ž€ :

๋‹ค์Œ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

(
set -x
eval $( docker-machine env shiny-new-machine-74d5a19e )
env | grep DOCKER
ls -al "${DOCKER_CERT_PATH}"
openssl x509 -in "${DOCKER_CERT_PATH}/cert.pem" -text
openssl x509 -in "${DOCKER_CERT_PATH}/ca.pem" -text
docker-compose --verbose version
docker-compose --verbose ps
DOCKER_TLS_VERIFY=0 docker-compose --verbose ps
) >"${HOME}/Desktop/docker-compose-890-outerr-$( date -u +%Y-%m-%dT%H:%M:%SZ ).txt" 2>&1

๋ถ™์—ฌ ๋„ฃ๊ธฐ / ์—…๋กœ๋“œ์— ์ ํ•ฉํ•œ ~/Desktop/docker-compose-890-outerr-2015-09-18T14:45:29Z.txt ์™€ ๊ฐ™์€ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

@posita
์—ฌ๊ธฐ์žˆ์–ด:
http://pastebin.com/vWqZgVKi

์ด๊ฒƒ์ด ๊ท€ํ•˜์˜ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ docker-compose ๋ฐ docker-py ๋ฒ„์ „์ด ๋’ค์ณ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค.

...
 docker-compose version: 1.4.1
 docker-py version: 1.4.0
...

๋˜ํ•œ (์ด๊ฒƒ์„ ์ž˜๋ชป ์ฝ์—ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค) ca.pem ๋ฐ cert.pem ์ด (๊ฐ€) ๋™์ผํ•œ Subject (์›๋ณธ boot2docker ์˜ ์›์ธ์ด ๋จ)์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์ด์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์—์„œ ์˜ค๋Š” ๊ฒƒ). ์ด๋Ÿฌํ•œ ์ธ์ฆ์„œ๋Š” docker-machine ์˜ํ•ด ์ƒ์„ฑ / ์œ ์ง€๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋„์ปค / ๋จธ์‹  # 1335์™€ ๋„์ปค / ๋จธ์‹  # 1767์„ ์ฐพ์•˜๋Š”๋ฐ, ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‘˜ ๋‹ค ์ง์ ‘ ์ง€์ ์— ์žˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

, ๋‚ด๊ฐ€ ์‚ฌ์šฉ FWIW docker-compose (๋ฅผ ํ†ตํ•ด ์„ค์น˜ pip A์˜ virtualenv OpenSSL์„ํ•˜๊ณ  MacPorts๋ฅผ์—์„œ ์„ค์น˜ ํ•œ ํŒŒ์ด์ฌ 2.7 ํฌํ•จ). ํ•ด๋‹น ๋ฒ„์ „์˜ OpenSSL์€์ด ๋ฌธ์ œ์—์„œ ํ™•์ธ ๋œ ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„๋ฐ›์Šต๋‹ˆ๋‹ค ( boot2docker ์—…๋ฐ์ดํŠธ๋กœ boot2docker 1.8.1+ ๋ฐ Vagrant์—์„œ ๋ฌธ์ œ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ( Vagrantfile ๋Š” ์ผ๋ถ€ ํ”„๋กœ๋น„์ €๋‹ ๋งˆ๋ฒ•์„ ํ†ตํ•ด boot2docker ์ธ์ฆ์„œ๋ฅผ ํ˜ธ์ŠคํŠธ๋กœ ๋‹ค์‹œ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค).

% cat /.../Vagrantfile
...
         # See <http://tinyurl.com/nz4tgy6>
         boot2docker.vm.provision :shell, inline: "set -e ; while ! docker >/dev/null ps --quiet ; do echo 'Waiting for Docker to come alive so we can kill it...' ; sleep 1 ; done ; sudo /etc/init.d/docker stop ; sudo rm -f /var/lib/boot2docker/tls/*.pem ~docker/.docker/*.pem ; sudo /etc/init.d/docker restart ; while ! docker >/dev/null ps --quiet ; do echo 'Waiting for Docker to come alive again so we can steal its keys...' ; sleep 1 ; done ; echo 'It lives!' ; [ -z \"$( find ~docker/.docker -name '*.pem' 2>/dev/null )\" ] || cp -Rv ~docker/.docker/*.pem '/vagrant/certs" , privileged: true
...
% env | grep DOCKER
DOCKER_HOST=tcp://w.x.y.z:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/.../certs
% ls "${DOCKER_CERT_PATH}"
ca.pem
cert.pem
key.pem
% openssl x509 -in "${DOCKER_CERT_PATH}/cert.pem" -text
...
        Issuer: O=Boot2DockerCA
...
        Subject: O=Boot2Docker
...
% openssl x509 -in "${DOCKER_CERT_PATH}/ca.pem" -text
...
        Subject: O=Boot2DockerCA
...
% virtualenv --python=python2.7 .../venv
...
% .../venv/bin/pip install docker-compose
...
% .../venv/bin/docker-compose --verbose version
docker-compose version: 1.4.1
docker-py version: 1.4.0
CPython version: 2.7.10
OpenSSL version: OpenSSL 1.0.2d 9 Jul 2015
% .../venv/bin/docker-compose ps
Name   Command   State   Ports
------------------------------

๊ทธ ์„ ํƒ๊ถŒ์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜์žˆ๋Š” ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์˜ docker-machine ์ƒ์„ฑ ๋œ ์ธ์ฆ์„œ์™€ ๋น„๊ตํ•˜์‹ญ์‹œ์˜ค.

+-zsh:39> openssl x509 -in /.../.docker/machine/machines/shiny-new-machine-74d5a19e/cert.pem -text
...
        Issuer: O=PavelPolyakov
...
        Subject: O=PavelPolyakov
...
+-zsh:40> openssl x509 -in /.../.docker/machine/machines/shiny-new-machine-74d5a19e/ca.pem -text
...
        Subject: O=PavelPolyakov
...

ca.pem Subject ์˜ ca.pem ๋Š” cert.pem ์˜ Subject ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๋ฌธ์ œ๊ฐ€ docker-compose ์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ( @aanand , ์•„๋งˆ๋„ ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?)์ด ๋ฌธ์ œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•ด ์กŒ๋Š”์ง€ ํ™•์ธ ํ•˜๊ณ  docker / machine์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ท€ํ•˜์˜ ์ดˆ๊ธฐ ์˜๊ฒฌ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ด๊ฒƒ์„ ์ฐธ์กฐ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

docker / machine์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ ๋ฅผ ์ œ์ถœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ VM ์ธ์Šคํ„ด์Šค์˜ /var/log/docker.log ๋˜๋Š” /var/log/boot2docker.log ์—์„œ ํฅ๋ฏธ๋กœ์šด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

ssh docker@[machine-instance] grep generate_cert /var/log/boot2docker.log

๋˜๋Š”:

docker-machine ssh grep generate_cert /var/log/boot2docker.log

OSX el capitain์—์„œ ์ด๊ฒƒ์„ ์–ป๊ณ ,

docker-machine version 0.4.1 (HEAD)
Docker version 1.8.2, build 0a8c2e3
docker-compose version: 1.4.2

์•ˆ๋…•ํ•˜์„ธ์š” @DaveBlooman ,

๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. brew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python ๋ฐ ๊ธฐํƒ€ ํ•ญ๋ชฉ๋„ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ.
๊ทธ๋ฆฌ๊ณ  docker-compose build ํ•  ๋•Œ ์ •ํ™•ํ•œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

homebrew๋ฅผ ํ†ตํ•ด Python 2.7.10

๋”ฐ๋ผ์„œ brew ๋•Œ๋ฌธ์— ํ™•์‹คํžˆ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค :(

@DaveBlooman , docker / machine # 1910 ์ฐธ์กฐ. @PavelPolyakov ์˜ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‘ ์‚ฌ๋žŒ์ด ์ง„๋‹จ์— ํ˜‘๋ ฅ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ (์ œ ๊ฒฝ์šฐ์—๋Š” Astrill)์— ์˜ํ•ด VPN ์—ฐ๊ฒฐ์ด ์—ด๋ ค ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

OSX 10.9.5์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

/usr/local/Cellar/docker-compose/1.5.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Starting compose_maven_1
/usr/local/Cellar/docker-compose/1.5.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Starting compose_ssh_1
/usr/local/Cellar/docker-compose/1.5.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning

ํŒŒ์ด์ฌ 2.7.10
docker-machine ๋ฒ„์ „ 0.5.0
docker-compose ๋ฒ„์ „ : 1.5.0

๋ชจ๋‘ Homebrew๋ฅผ ํ†ตํ•ด ์„ค์น˜๋จ

@anthonygreen , ๊ทธ๊ฒƒ์€ ์‹ค์งˆ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Homebrew ์‚ฌ์šฉ์ž๋Š” ์ด์™€ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฌธ์ œ ์ œ์ถœ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์ด ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์ง€ ์•Š์•˜์ง€๋งŒ Docker Toolbox 1.9.1a๋ฅผ ์‚ฌ์šฉํ•˜๋Š” OS X Yosemite์˜ ์ตœ๊ทผ ์„ค์ •์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

$ docker-machine --version
docker-machine version 0.5.1 (7e8e38e)
$ docker-compose --version
docker-compose version: 1.5.1
$ docker --version
Docker version 1.9.1, build a34a1d5

์‚ฌ์šฉ์ž ์ง€์ • CURL_CA_BUNDLE ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ธํŠธ (์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ง€์ • ๋‚ด๋ถ€ ์ธ์ฆ์„œ ํฌํ•จ)๊ฐ€ ์žˆ๊ณ  docker-compose ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ • ํ•ด์ œํ•˜๋ฉด [SSL: CERTIFICATE_VERIFY_FAILED] ์˜ค๋ฅ˜๋ฅผ ํ†ต๊ณผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ (unset CURL_CA_BUNDLE; docker-compose up)
Starting ...

ํŽธ์ง‘ : ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์—ฌ๊ธฐ์— ์ฃผ์„์„๋‹ค๋Š” ์˜๋ฏธ https://github.com/docker/machine/issues/1880

@pmahoney , ์šฐ๋ฆฌ์—๊ฒŒ ์•Œ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฒฐ์ฝ” ์ง์ž‘ํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์„œ๋ธŒ ์‰˜์„ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).

$ CURL_CA_BUNDLE= docker-compose up

@posita env var๋ฅผ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$TMPDIR/requests/packages/urllib3/connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html

SSL ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ.

@pmahoney , ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ set-but-empty CURL_CA_BUNDLE ์€ ์ „ํ˜€ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์˜๋ฏธ (์ฆ‰, null ์žฌ์ •์˜)๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค (์•„๋งˆ๋„ ๊ธฐ๋ณธ ์œ„์น˜๋กœ ๋ณด์ž„). ๋ฌธ์„œ์˜ ๋™์ž‘์—์„œ ์ด๊ฒƒ์„ ์ฐพ์œผ๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์€ ์ด๊ฒƒ ์ž…๋‹ˆ๋‹ค.

@neilsarkar ๋‚ด ๋ฌธ์ œ๋Š” Charles ํ”„๋ก์‹œ๋„ ์‹คํ–‰ ์ค‘์ด์—ˆ์Šต๋‹ˆ๋‹ค! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์˜ค ์„ธ์ƒ์—, ํ…Œ์ŠคํŠธํ•˜๋˜ ๋‘ ์ปดํ“จํ„ฐ ๋ชจ๋‘์— ์ปค์Šคํ…€ CURL_CA_BUNDLE์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ

๋‚˜๋ฅผ ์œ„ํ•ด ์•„๋ฌด๊ฒƒ๋„, CURL_CA_BUNDLE ๋ณ€์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค :(
๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ CURL_CA_BUNDLE์„ ์•„๋ฌด๊ฒƒ๋„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด (CURL_CA_BUNDLE =) @pmahoney๊ฐ€ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ์ž‘๋™ํ•˜์ง€๋งŒ ํ„ฐ๋ฏธ๋„์€ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋กœ ์™„์ „ํžˆ ํํŠธ๋Ÿฌ์กŒ์Šต๋‹ˆ๋‹ค.
๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. :)

CURL_CA_BUNDLE ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ข‹์€ ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. :)

๊ณ ๋งˆ์›Œ

webkit-patch์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. SSL / TLS ๋ชจ๋“ˆ ์˜ ssl.get_default_verify_paths() ๋Š” Python / OpenSSL์ด CA ์ธ์ฆ์„œ ํŒŒ์ผ์„ ์˜ˆ์ƒํ•˜๋Š” ์œ„์น˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ„ฐ๋ฏธ๋„์—์„œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๋ฉด :

python3 -c "import ssl; [print(i) for i in ssl.get_default_verify_paths()]"

SSL_CERT_FILE ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ Python์˜ SSL ๋ชจ๋“ˆ์€ /usr/local/ssl/cert.pem CA ์ธ์ฆ์„œ ํŒŒ์ผ์„ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค (OpenSSL์„ /usr/local/ssl ์„ค์น˜ ํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ). ๋”ฐ๋ผ์„œ SSL_CERT_FILE ๋ฅผ ๋ฃจํŠธ CA ์ธ์ฆ์„œ๊ฐ€์žˆ๋Š” ์ธ์ฆ์„œ ํŒŒ์ผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ฃจํŠธ CA ์ธ์ฆ์„œ๊ฐ€์žˆ๋Š” ํŒŒ์ผ์„ /usr/local/ssl/cert.pem ํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ CA ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ curl ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์†Œ์Šค ํŠธ๋ฆฌ์—์„œ lib/mk-ca-bundle.pl ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ca-bundle.crt ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. SSL_CERT_FILE ์ด Python 2.7.11 ๋ฐ Python 3.5.0๊ณผ ํ•จ๊ป˜ OpenSSL 1.0.2d์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@grahamc ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์…จ์Šต๋‹ˆ๊นŒ? ์›๊ฒฉ ๋„์ปค ๋ฐ๋ชฌ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose ์—์„œ๋Š” ์‹คํŒจํ•˜๋Š” ๋น„์Šทํ•œ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์–ป๋Š” ์˜ค๋ฅ˜๋Š” ERROR: SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

์•„๋‹ˆ์š”, ๋ถˆํ–‰ํžˆ๋„ ์›๊ฒฉ ๋„์ปค ํ˜ธ์ŠคํŠธ๋ฅผ ๋ฒ„๋ ค์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ CURL_CA_BUNDLE ์ธํ•ด docker-compose ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ERROR: SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

docker ์€ (๋Š”) ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. docker-compose ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ฌด์‹œํ•˜๋„๋กํ•˜๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ์˜ˆ์ƒ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@buckett , ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์—ฌ ๊ธฐ๋Šฅ ์š”์ฒญ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. docker-py ๋กœ ์ž๋งค ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๊ณ  ์„œ๋กœ ์ฐธ์กฐํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด๋ณด์‹ญ์‹œ์˜ค. ์–ด๋–ค ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ƒˆ๋กœ์šด ๋ฌธ์ œ # 3114 ์ƒ์„ฑ

๋ชจ๋‘์ด ๋ฌธ์ œ๋ฅผ ์•„์ง ๊ณ ์ณค์Šต๋‹ˆ๊นŒ? ์—ฌ์ „ํžˆ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚ด docker-compose version :

docker-compose version 1.6.2, build 4d72027
docker-py version: 1.7.2
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

์ด๊ฒƒ์€ docker-compose --verbose build ์—์„œ ์–ป์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

compose.config.config.find: Using configuration files: ./docker-compose.yml
docker.auth.auth.load_config: File doesn't exist
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "compose/cli/main.py", line 56, in main
  File "compose/cli/docopt_command.py", line 23, in sys_dispatch
  File "compose/cli/docopt_command.py", line 26, in dispatch
  File "compose/cli/main.py", line 189, in perform_command
  File "compose/cli/command.py", line 52, in project_from_options
  File "compose/cli/command.py", line 85, in get_project
  File "compose/cli/command.py", line 68, in get_client
  File "site-packages/docker/api/daemon.py", line 78, in version
  File "site-packages/docker/utils/decorators.py", line 47, in inner
  File "site-packages/docker/client.py", line 112, in _get
  File "site-packages/requests/sessions.py", line 477, in get
  File "site-packages/requests/sessions.py", line 465, in request
  File "site-packages/requests/sessions.py", line 573, in send
  File "site-packages/requests/adapters.py", line 431, in send
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

Docker์˜ ๋„๊ตฌ ์ƒ์ž๋ฅผ ํ†ตํ•ด docker, docker-mahine ๋ฐ docker-compose๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ชจ๋“  ์ œ์•ˆ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์šด์ด ์—†์Šต๋‹ˆ๋‹ค. docker ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†์–ด์„œ ์Šค์Šค๋กœ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ทผ๋ณธ ์›์ธ์ด๋‚˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ตœ์‹  openssl ๋ฒ„์ „์œผ๋กœ ์ž‘์„ฑ 1.7.0์—์„œ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋ชจ๋‘ ์•ŒํŒŒ์ธ์—์„œ ๋นŒ๋“œ๋˜๊ณ  ์‹คํ–‰๋˜๋ฏ€๋กœ ํ™˜๊ฒฝ์€ ์ˆœ์ˆ˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

/usr/src/app # env | sed 's/DOCKER_HOST=.*/DOCKER_HOST=#redacted/' && docker version && docker ps && docker-compose version && docker-compose pull
HOSTNAME=aebfe81b5938
SHLVL=1
PYTHON_PIP_VERSION=8.1.1
HOME=/root
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
DOCKER_TLS_VERIFY=1
TERM=xterm
DOCKER_CERT_PATH=/certs
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LANG=C.UTF-8
PYTHON_VERSION=3.5.1
DOCKER_HOST=#redacted
PWD=/usr/src/app
Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 21:49:11 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 15:39:25 2016
 OS/Arch:      linux/amd64
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
docker-compose version 1.7.0, build 0d7bf73
docker-py version: 1.8.0
CPython version: 3.5.1
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
Pulling registry (registry:2)...
ERROR: SSL error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

๋ฟก๋ฟก
์ œ ๊ฒฝ์šฐ์—๋Š” ์žฌ์ •์˜ ๋œ CURL_CA_BUNDLE env ๋ณ€์ˆ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋„ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@PavelPolyakov๋Š” ๋‚ด ํ™˜๊ฒฝ ๋คํ”„๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค ... CURL_CA_BUNDLE ์—†์Œ

@PavelPolyakov ์•Œ์•˜์–ด ์ด๊ฒƒ์€ ์ด์ƒํ•˜๋‹ค. ๋‚ด ํ™˜๊ฒฝ์— ์žˆ์ง€ ์•Š๋”๋ผ๋„ env ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ์„ค์ • ํ•ด์ œํ•˜๊ณ  ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

@jmmills ํ—ˆ ...

์‹œ์Šคํ…œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜๋Š” Mac OS, homebrew docker-compose ๋ฐ docker-machine. ์ƒˆ๋กœ ์ƒ์„ฑ ๋œ ๋จธ์‹  : docker-machine create --driver=vmwarefusion --vmwarefusion-memory-size 1536 dev

env | grep CURL ์€ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
docker-compose ps ๋ฐ˜ํ™˜

์˜ค๋ฅ˜ : SSL ์˜ค๋ฅ˜ : ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ '172.16.129.133'์ด 'localhost'์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CURL_CA_BUNDLE='' docker-compose ps ๋ฐ˜ํ™˜ :

/usr/local/Cellar/docker-compose/1.7.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
/usr/local/Cellar/docker-compose/1.7.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
Name   Command   State   Ports 
------------------------------

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค- CURL_CA_BUNDLE ๋Š” ๋‚ด ํ™˜๊ฒฝ์— ์„ค์ •๋˜์ง€ ์•Š์•˜๊ณ  ๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋ฉด @inanimatt์™€ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ์—…์ŠคํŠธ๋ฆผ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ƒ„์ƒˆ๊ฐ€๋‚ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” "์ •์˜ ๋จ"๊ณผ "๋น„์–ด ์žˆ์Œ"์ด ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰๋˜๋Š” curl์— ๋Œ€ํ•œ ํ™˜๊ฒฝ ํ˜ธํ™˜์„ฑ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ,
์ œ์ด์Šจ ๋ฐ€์Šค

  • ๋ชจ๋ฐ”์ผ์—์„œ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

2016 ๋…„ 4 ์›” 24 ์ผ ์˜ค์ „ 6:14์— Alex Wilson [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค-CURL_CA_BUNDLE์ด ๋‚ด ํ™˜๊ฒฝ์— ์„ค์ •๋˜์ง€ ์•Š์•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋ฉด @inanimatt์™€ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

homebrew ๋ฒ„์ „์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. homebrew Python์„ ์„ค์น˜ ํ•œ ๋‹ค์Œ pip๋ฅผ ํ†ตํ•ด docker-compose๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋“  ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

2016 ๋…„ 4 ์›” 24 ์ผ 14:14์— Alex Wilson [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค-CURL_CA_BUNDLE์ด ๋‚ด ํ™˜๊ฒฝ์— ์„ค์ •๋˜์ง€ ์•Š์•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋ฉด @inanimatt์™€ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์ด์ „์— Linux์—์„œ ๋ฌธ์ œ์˜ ๋ณต์ œ๋ฅผ ๋ถ™์—ฌ ๋„ฃ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์ผ ์›Œํฌ ์Šคํ…Œ์ด์…˜์—์„œ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ,
์ œ์ด์Šจ ๋ฐ€์Šค

  • ๋ชจ๋ฐ”์ผ์—์„œ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

2016 ๋…„ 4 ์›” 24 ์ผ ์˜คํ›„ 12์‹œ 22 ๋ถ„์— Matt Robinson [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

homebrew ๋ฒ„์ „์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. homebrew Python์„ ์„ค์น˜ ํ•œ ๋‹ค์Œ pip๋ฅผ ํ†ตํ•ด docker-compose๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋“  ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

2016 ๋…„ 4 ์›” 24 ์ผ 14:14์— Alex Wilson [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค-CURL_CA_BUNDLE์ด ๋‚ด ํ™˜๊ฒฝ์— ์„ค์ •๋˜์ง€ ์•Š์•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋ฉด @inanimatt์™€ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

brew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ docker-compose๋ฅผ ๋ฒ„์ „ 1.7๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ์ดํ›„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

$ docker-compose ps
ERROR: SSL error: hostname '192.168.99.100' doesn't match 'localhost'
$ docker-compose version
docker-compose version 1.7.0, build unknown
docker-py version: 1.8.0
CPython version: 2.7.10
OpenSSL version: OpenSSL 0.9.8zh 14 Jan 2016

CURL_CA_BUNDLE ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ข…๋ฅ˜๋ฅผ ๋น„์šฐ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

CURL_CA_BUNDLE= docker-compose ps
/opt/boxen/homebrew/Cellar/docker-compose/1.7.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
/opt/boxen/homebrew/Cellar/docker-compose/1.7.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
/opt/boxen/homebrew/Cellar/docker-compose/1.7.0/libexec/vendor/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
   Name                 Command               State    Ports
------------------------------------------------------------

1.6.2๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

$ brew switch docker-compose 1.6.2
Cleaning /opt/boxen/homebrew/Cellar/docker-compose/1.4.2
Cleaning /opt/boxen/homebrew/Cellar/docker-compose/1.5.1
Cleaning /opt/boxen/homebrew/Cellar/docker-compose/1.5.2
Cleaning /opt/boxen/homebrew/Cellar/docker-compose/1.6.0
Cleaning /opt/boxen/homebrew/Cellar/docker-compose/1.6.2
Cleaning /opt/boxen/homebrew/Cellar/docker-compose/1.7.0
3 links created for /opt/boxen/homebrew/Cellar/docker-compose/1.6.2
$ docker-compose ps
   Name                 Command               State    Ports
------------------------------------------------------------

CURL_CA_BUNDLE์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋Œ€์‹  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
CURL_CA_BUNDLE = ~ / .docker / machine / machines / default / ca.pem docker-compose ps

๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์ฒ˜์Œ์œผ๋กœ ์ œ๊ธฐ ํ•œ ์‚ฌ๋žŒ์€ ์•„๋‹ ์ˆ˜ ์žˆ์ง€๋งŒ curl ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๊ด€๋ จ์—†๋Š” Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ,
์ œ์ด์Šจ ๋ฐ€์Šค

  • ๋ชจ๋ฐ”์ผ์—์„œ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

2016 ๋…„ 5 ์›” 7 ์ผ ์˜คํ›„ 3:22์— Lorenzo Sicilia [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

CURL_CA_BUNDLE์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋Œ€์‹  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
CURL_CA_BUNDLE = ~ / .docker / machine / machines / default / ca.pem docker-compose ps

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ๋ฌธ์ œ๋Š” ์ž์ฒด ์„œ๋ช… ๋œ ์ธ์ฆ์„œ์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” REQUESTS_CA_BUNDLE ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

  • ๋งˆ์ดํด ํ›„์‰ฌ

@aboutlo ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค-๋‹ค๋ฅธ ca.pem ํŒŒ์ผ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜ ์œผ๋ฉฐ์ด ํŒŒ์ผ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ Windows๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋” ๋งŽ์€ ๋ถ€๋‘ ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ndg-httpsclient (pip ํฌํ•จ-๋ฒ„์ „ 0.4.0)๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/docker/compose/issues/3365์—์„œ ๋‚ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

docker-compose ๋ฐ docker-py๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ๋ช…๋ น์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋‚˜ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์„ ์„ž์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์— --tls๋ฅผ ์ง€์ •ํ•˜๋”๋ผ๋„ ์ด์ œ TLSConfig ๊ฐœ์ฒด๊ฐ€ ๋ช…๋ น ์˜ต์…˜์—์„œ ์™„์ „ํžˆ ์ƒ์„ฑ๋˜๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ์ƒ์„ฑ ๋œ TFSConfig ๊ฐœ์ฒด๋ฅผ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ์˜ต์…˜์„ TLSConfig ๊ฐœ์ฒด๋กœ ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ m-housh OMG ๊ทธ ํŒ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‚˜์—๊ฒŒ๋„ ๋˜‘๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค! ๋‚ด ํ™˜๊ฒฝ์—์„œ REQUESTS_CA_BUNDLE ์„ ์ œ๊ฑฐํ•˜๊ณ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” OpenSSL ๋ฒ„์ „ ์ฐจ์ด ๋•Œ๋ฌธ์— (Pyhton์€ 1.0.2์ด์ง€๋งŒ OS๋Š” 0.9.8) ๋‘˜ ๋‹ค 1.0.2๋กœ ๋งŒ๋“ค์—ˆ์ง€ ๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋‹จ์ˆœํžˆ Docker์— ssh๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•œ ๋‹ค์Œ ์ธ์ฆ ๋œ ํ‚ค์—์„œ ๋‚ด ์ธ์ฆ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์–ด๋–ป๊ฒŒ ๋“  ์ž˜๋ชป๋œ ์ธ์ฆ์„œ์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

boot2docker ssh
docker<strong i="10">@boot2docker</strong>:~$ cat .ssh/authorized_keys

์ด ์ธ์ฆ์„œ๊ฐ€ ์‹ค์ œ๋กœ ์ปดํ“จํ„ฐ์˜ ์ธ์ฆ์„œ์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹ ์˜ ํŒŒ์ผ์„์ด ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜๊ณ  ์ €์žฅํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

docker-compose up

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์œผ๋ฉฐ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฌธ์ œ ๊ทธ๋ฃจ๋ฐ : โ€‹โ€‹์—ฌ๊ธฐ์— ์„ค๋ช… ๋œ ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜ ๋ชจ๋“œ ๋ฐ ์‚ฌ์šฉ์ž ์˜ค๋ฅ˜ / ์ž˜๋ชป๋œ ๊ตฌ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค (๋Œ€๋ถ€๋ถ„ ์ด๋ ฅ)๊ฐ€์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

compose์—์„œ ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ๋ฌธ์ œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ํ•ญ๋ชฉ์ด ์—†์œผ๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์—ฌ์ „ํžˆ ํ˜„๋Œ€์ ์ธ ๋ฒ„์ „ ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ๋ณด๊ณ ์žˆ๋Š” ๊ฒฝ์šฐ ๋“ฑ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ์—ฌ์‹ญ์‹œ์˜ค

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰