2015-08-23 2 views
0

Я использую Docker для среды Django, но когда я запускаю команду, как docker-compose run web bash, все, что я набираю после загрузки bash, никогда не отображается, а затем в конечном итоге процесс умирает со следующей ошибкой:Docker Compose run, который приводит к сбоям пользователя с «сломанной трубой»

Traceback (most recent call last): 
    File "/usr/local/Cellar/fig/1.3.3/libexec/bin/docker-compose", line 9, in <module> 
    load_entry_point('docker-compose==1.3.3', 'console_scripts', 'docker-compose')() 
    File "/usr/local/Cellar/fig/1.3.3/libexec/lib/python2.7/site-packages/compose/cli/main.py", line 32, in main 
    command.sys_dispatch() 
    File "/usr/local/Cellar/fig/1.3.3/libexec/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 21, in sys_dispatch 
    self.dispatch(sys.argv[1:], None) 
    File "/usr/local/Cellar/fig/1.3.3/libexec/lib/python2.7/site-packages/compose/cli/command.py", line 34, in dispatch 
    super(Command, self).dispatch(*args, **kwargs) 
    File "/usr/local/Cellar/fig/1.3.3/libexec/lib/python2.7/site-packages/compose/cli/docopt_command.py", line 24, in dispatch 
    self.perform_command(*self.parse(argv, global_options)) 
    File "/usr/local/Cellar/fig/1.3.3/libexec/lib/python2.7/site-packages/compose/cli/command.py", line 66, in perform_command 
    handler(project, command_options) 
    File "/usr/local/Cellar/fig/1.3.3/libexec/lib/python2.7/site-packages/compose/cli/main.py", line 358, in run 
    dockerpty.start(project.client, container.id, interactive=not options['-T']) 
    File "/usr/local/Cellar/fig/1.3.3/libexec/vendor/lib/python2.7/site-packages/dockerpty/__init__.py", line 27, in start 
    PseudoTerminal(client, container, interactive=interactive, stdout=stdout, stderr=stderr, stdin=stdin).start() 
    File "/usr/local/Cellar/fig/1.3.3/libexec/vendor/lib/python2.7/site-packages/dockerpty/pty.py", line 153, in start 
    self._hijack_tty(pumps) 
    File "/usr/local/Cellar/fig/1.3.3/libexec/vendor/lib/python2.7/site-packages/dockerpty/pty.py", line 241, in _hijack_tty 
    write_stream.do_write() 
    File "/usr/local/Cellar/fig/1.3.3/libexec/vendor/lib/python2.7/site-packages/dockerpty/io.py", line 164, in do_write 
    raise e 
OSError: [Errno 32] Broken pipe 

Вот мой докер-compose.yml:

web: 
    build: . 
    ports: 
    - "80:80" 
    links: 
    - postgres 
    volumes: 
    - .:/code 
    env_file: .env 
    command: /code/manage.py runserver 0.0.0.0:80 

postgres: 
    image: postgres:latest 

Вот мой Dockerfile:

## python, node and bower ## 
FROM python:3.4.3 
WORKDIR /usr/local 
RUN apt-get install curl && \ 
     curl --silent --location https://deb.nodesource.com/setup_0.12 | bash - && \ 
     apt-get install -y nodejs && \ 
     npm install -g bower 
ENV PATH /node_modules:$PATH 

## code install ## 
RUN mkdir /code 
WORKDIR /code 
ADD ./requirements/ /code/requirements/ 
RUN pip install -r /code/requirements/docker.txt 
ADD ./ /code/ 

Я запускаю Docker 1.8.1, Compose 1.4.0, Machine 0.4.1, Python 2.7.10, все на OS X 10.10.5. Я попытался удалить все контейнеры докеров и восстановить мой проект, но я получаю ту же ошибку. Я также попытался восстановить мою докер-машину и начать все с нуля, но снова эту проблему.

Примечание: есть два изменения, которые я могу думать о том, что может быть связано с этим не работает:

  1. OS X 10.10.5 модернизированы меня от Python 2.7.6 до 2.7.10.
  2. Я нашел это Github issue, где кто-то упомянул о получении этой ошибки «сломанной трубы» после исправления предупреждения «InsecurePlatformWarning». Я также применил исправление, чтобы адресовать это (pip install requests[security]) в последние несколько дней, но все работало непосредственно после применения этого изменения, но, возможно, комбо из него и python 2.7.10 являются проблемой?

Любые идеи о том, почему это происходит сбой?

+0

отлично работает (то есть, с '' Dockerfile' и докер-compose.yml' и пустой '.env', Я получаю полезную подсказку bash) с версией для докер-версии: 1.3.3, CPython version: 2.7.9 и ** docker 1.8.1, build d12ea79 **. Можете ли вы попробовать обновить докер? Тем временем я попробую установить докер 1.7.1. –

+0

Извините, мне не удалось установить докер 1.7.1 –

+0

Я обновил все на своей машине и восстановил все после перезапуска, и я думал, что это исправлено, но я забыл, что моей реальной проблемой была проблема «сломанной трубы» - был долгим днем ​​других вопросов с докером. Во всяком случае, проблема все еще существует с Docker 1.8.1, Compose 1.4.0, Machine 0.4.1, Python 2.7.10. Python 2.7.10 - единственное изменение, о котором я знаю, поскольку это перестало работать. –

ответ

2

Как описано michaelperret на docker-compose github issue, он начал получать ту же проблему, когда он применил fix for the InsecurePlatformWarning. Я сам применил это исправление несколько дней назад, но похоже, что проблема «сломанной трубы» не появилась, пока я не перезапустил свою систему (OS X обновил меня до 10.10.5).

Исправление было мне удалить некоторые пакеты, которые были частью исправления:

pip uninstall pyopenssl ndg-httpsclient pyasn1 
+1

Я столкнулся с этой проблемой после обновления моей операционной системы до Ubuntu 16.04. Удаление системных пакетов 'pyopenssl',' ndg-httpsclient' и 'pyasn1' исправляет проблему. Однако, будьте осторожны, это никогда не рекомендуется удалять пакеты системы Python. –