我有一个用PHP/Symfony构建的api,在Docker容器中。我想测试一下。
为此:
>
第二:我运行测试:vendor/bin/simple phpunit
在我的测试中,我有以下要求:
$result = $this->client->request(
'POST',
'10.110.167.124:8080/api/v1/course_invoices',
[
RequestOptions::HEADERS => [
'Accept' => 'application/ld+json',
'Content-Type' => 'application/json',
'Authorization' => "Bearer {$this->token}",
],
RequestOptions::BODY => json_encode([
'courseInstanceId' => self::COURSE_INSTANCE,
]),
]
);
如您所见,我请求endpoint"10.110.167.124:8080/api/v1....."。它起作用了,但我知道我不能再这样下去了。
我试着用“localhost”、“localhost:8080”、“http://localhost”等...没有成功。我总是有这个错误:
GuzzleHttp\Exception\ConnectException:cURL错误7:无法连接到本地主机端口8080:连接被拒绝(请参阅https://curl.haxx.se/libcurl/c/libcurl-errors.html)
那么如何在容器内进行此测试呢?
我的码头工人
services:
da-invoicing-php:
build:
context: .
args:
GITHUB_TOKEN: 060......2e8b
container_name: da-invoicing-php
depends_on:
- da-invoicing-db
env_file:
- .env.local
# Comment out this volume in production
volumes:
- .:/srv/api:rw,cached
da-invoicing-api:
build:
context: .
dockerfile: Dockerfile.nginx
depends_on:
- da-invoicing-php
volumes:
- ./public:/srv/api/public:ro
environment:
- INTERNAL_DNS_RESOLVER=127.0.0.11
ports:
- "8080:80"
da-invoicing-db:
image: postgres:9.6-alpine
environment:
- POSTGRES_DB=api
- POSTGRES_USER=api-platform
# You should definitely change the password in production
- POSTGRES_PASSWORD=!ChangeMe!
ports:
- "1234:5432"
我的Dockerfile:
FROM php:7.3-fpm-alpine
RUN apk add --no-cache \
git
ARG http_proxy
ARG APCU_VERSION=5.1.17
RUN if [ ! -z $http_proxy ] ; then pear config-set http_proxy $http_proxy; fi \
&& set -xe \
&& apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
postgresql-dev \
libzip-dev \
&& docker-php-ext-install -j$(nproc) \
intl \
pdo_pgsql \
zip \
&& pecl install \
apcu-${APCU_VERSION} \
&& pecl clear-cache \
&& docker-php-ext-enable --ini-name 20-apcu.ini apcu \
&& docker-php-ext-enable --ini-name 05-opcache.ini opcache \
&& runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)" \
&& apk add --no-cache --virtual .api-phpexts-rundeps $runDeps \
&& apk del .build-deps
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Supervisor
RUN apk add --no-cache supervisor
COPY docker/php/supervisor/*.ini /etc/supervisor.d/
ARG XDEBUG=false
ARG XDEBUG_VERSION=2.6.0
RUN if [ "$XDEBUG" != "false" ] ;then \
set -eux; \
apk add --no-cache --virtual .build-deps $PHPIZE_DEPS; \
pecl install xdebug-$XDEBUG_VERSION; \
docker-php-ext-enable xdebug; \
apk del .build-deps; \
fi
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV COMPOSER_NO_INTERACTION=1
ARG GITHUB_TOKEN
RUN composer config -g github-oauth.github.com ${GITHUB_TOKEN}
RUN composer global require "symfony/flex" --prefer-dist --no-progress --no-suggest --classmap-authoritative \
&& composer clear-cache
ENV PATH="${PATH}:/root/.composer/vendor/bin"
WORKDIR /srv/api
# Build for production
ARG APP_ENV=prod
# Prevent the reinstallation of vendors at every changes in the source code
COPY composer.json composer.lock ./
RUN echo '<?php return [];' > .env.local.php
RUN composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest \
&& composer clear-cache
# copy only specifically what we need
COPY bin bin/
COPY config config/
COPY public public/
COPY src src/
COPY .env ./
RUN set -eux; \
mkdir -p var/cache var/log var/sessions; \
composer dump-autoload --classmap-authoritative --no-dev; \
composer run-script --no-dev post-install-cmd; \
chmod +x bin/console; sync; \
chown -R www-data var
VOLUME /srv/api/var
COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/php/fpm.d/zz-academy.conf /usr/local/etc/php-fpm.d/
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
COPY docker/php/fpm.d/zz-academy.conf /usr/local/etc/php-fpm.d/
RUN chmod +x /usr/local/bin/docker-entrypoint
EXPOSE 9000
ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]
您不能在PHP容器中直接使用localhost—它不提供HTTP服务,它是PHP fpm。
你必须调用nginx容器da-发票-api
$result = $this->client->request(
'POST',
'da-invoicing-api/api/v1/course_invoices',
[
RequestOptions::HEADERS => [
'Accept' => 'application/ld+json',
'Content-Type' => 'application/json',
'Authorization' => "Bearer {$this->token}",
],
RequestOptions::BODY => json_encode([
'courseInstanceId' => self::COURSE_INSTANCE,
]),
]
);
Docker-comment为comment文件中的每个容器创建主机别名(同一网络上的其他容器可以使用服务名称)。
如何在docker容器中运行基于的测试用例? 我有一个简单的Spring Boot应用程序,它具有集成测试(组件级),使用与容器交互。测试用例正在破坏来自外部容器(本地机器)的罚款。 我们正在容器中运行所有内容,并且build正在docker jenkins映像上运行。Docker文件正在创建jar,然后创建image。找不到安装的docker。下面是我的docker文件。 处理这个案子最好的办法
我清理了一个用Quarkus实现的旧Java项目,并将依赖项更新到Quarkus 2.4.0。然而,我注意到,当我启动应用程序时,它还启动了Docker PostgreSQL容器。我还有另一个数据库需要测试,所以我不需要Quarkus为我创建一个数据库。我找不到要在<code>应用程序中设置的任何配置属性。属性,以防止创建此属性。我遗漏了什么吗?有没有我需要设置的标志?
问题内容: 有一个列出图像的命令,但是似乎没有对应的。 除了扎根并调查那里似乎没有办法。我想念什么吗?那是不应该做的事情吗? 问题答案: 要仅显示 正在运行的容器,请 使用给定命令: 要显示 所有容器,请 使用给定命令: 要显示 最新创建的容器 (包括所有状态),请使用给定命令: 要显示 n个最后创建的容器 (包括所有状态),请使用给定命令: 要显示 总文件大小,请 使用给定命令: 上面显示的内容
问题内容: 使用来自注册表的docker映像时,我经常需要查看映像容器创建的卷。 注意:我在Red Hat 7上使用Docker版本1.3.2。 例 来自Docker Registry 的官方映像在处为容器配置了一个卷。 在容器中显示体积最简洁的命令是什么? 问题答案: 使用来获取容器ID。 然后 例: 1号航站楼 2号航站楼 输出 显然是由于使用 Go 语言来实现docker命令工具。 在没有命
问题内容: 通常,docker容器使用 root 用户运行。我想使用其他用户,使用docker的USER指令没问题。但是该用户应该能够在容器内使用 sudo 。该命令丢失。 这是用于此目的的简单Dockerfile: 运行此容器,我以用户’docker’登录。当我尝试使用sudo时,找不到命令。所以我尝试使用以下方法在Dockerfile中安装 sudo 软件包 这导致 无法找到包sudo 问题答