Композитор не работает в контейнере Docker: "https://packagist.org/packages.json" не содержит действительный JSON - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть докер-контейнер, на котором запущено приложение Symfony (которое работает нормально). Команды установки / запроса Composer (например, composer require annotations) внутри контейнера часто завершаются с ошибкой:

[Seld\JsonLint\ParsingException]                                        
  "https://packagist.org/packages.json" does not contain valid JSON       
  Parse error on line 1:                                                  
  \\\\\\u��n[7
                ���                                                    
  ^                                                                       
  Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

Я действительно не смог найти образец, когда команды выполняются успешно или нет, он кажется совершенно случайным. Я чувствую, что это может быть кеш / сетевое взаимодействие, так как обычно оно работает некоторое время, а затем перестает работать некоторое время, но я не уверен. Команды Composer отлично работают в хост-системе (Ubuntu 17.10 / 18.04 - хотя обновление может помочь, но это не имеет значения). Все остальные вещи композитора в контейнере работают нормально. Результат одинаков, независимо от того, открываю ли я оболочку в контейнере и запускаю там команду или запускаю команду через docker-compose exec.

Вот мой Dockerfile:

FROM alpine:3.6

RUN apk add --update \
    php7-fpm \
    php7-apcu \
    php7-ctype \
    php7-curl \
    php7-dom \
    php7-gd \
    php7-iconv \
    php7-imagick \
    php7-json \
    php7-intl \
    php7-mcrypt \
    php7-mbstring \
    php7-opcache \
    php7-openssl \
    php7-pdo \
    php7-pdo_mysql \
    php7-mysqli \
    php7-xml \
    php7-zlib \
    php7-phar \
    php7-tokenizer \
    php7-session \
    php7-xmlwriter \
    php7-simplexml \
    make \
    curl

RUN rm -rf /var/cache/apk/* && rm -rf /tmp/*

RUN curl --insecure https://getcomposer.org/composer.phar -o /usr/bin/composer && chmod +x /usr/bin/composer

ADD symfony.ini /etc/php7/php-fpm.d/
ADD symfony.ini /etc/php7/cli/conf.d/

ADD symfony.pool.conf /etc/php7/php-fpm.d/

CMD ["php-fpm7", "-F"]

WORKDIR /var/www/symfony
EXPOSE 9000

Я запускаю его через docker-compose, который монтирует том в / var / www / symfony и выставляет порт:

version: '2.1'

services:
  php:
    build: .
    volumes:
      - ./symfony:/var/www/symfony
    ports:
      - 9000:9000

Как мне заставить это работать? Какие-либо настройки, о которых я не знаю, мне нужно активировать, чтобы композитор мог правильно подключиться?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы также должны добавить в Dockerfile

RUN apk update && apk add ca-certificates && update-ca-certificates && apk add openssl

и после установки композитора

RUN composer self-update

0 голосов
/ 30 апреля 2018

Вы можете добавить это в свой DockerFile:

RUN composer config --global repo.packagist composer https://packagist.org
...