Php 编写器未在docker容器中工作:“;https://packagist.org/packages.json" 不包含有效的JSON
我有一个docker容器,它运行一个Symfony应用程序(工作正常)。容器内的Composer install/require命令(例如,Php 编写器未在docker容器中工作:“;https://packagist.org/packages.json" 不包含有效的JSON,php,symfony,docker,composer-php,docker-compose,Php,Symfony,Docker,Composer Php,Docker Compose,我有一个docker容器,它运行一个Symfony应用程序(工作正常)。容器内的Composer install/require命令(例如,Composer require注释)通常会失败,并出现以下错误: [Seld\JsonLint\ParsingException] "https://packagist.org/packages.json" does not contain valid JSON
Composer require注释
)通常会失败,并出现以下错误:
[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-本以为更新可能会有所帮助,但没有什么不同)。容器中的所有其他东西composer都可以正常工作。无论是在容器中打开shell并在那里运行命令,还是通过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
我怎样才能让它工作?要使composer能够正确连接,我需要激活任何我不知道的设置?您可以将其添加到DockerFile中:
RUN composer config --global repo.packagist composer https://packagist.org
您还应该添加到Dockerfile中
运行apk更新和apk添加ca证书和更新ca证书和apk添加openssl
在安装了composer之后
运行composer自我更新
它似乎正在工作(我们将查看它是否有效)-为什么这样可以解决问题?为什么?这似乎没有什么不同?对我来说,这是一个过时的作曲家,所以我自我更新了它,效果很好。也许这个答案会有所帮助:在简历中:0。更新编写器(`composer self Update)1。禁用IPV6 2。删除(或重命名为repo_temp)文件夹%LOCALAPPDATA%\Composer\repo 3。删除(或重命名为vendor_temp)项目中的vendor文件夹(以强制composer再次下载所有组件)