小编sup*_*r.t的帖子

自定义Docker镜像不继承CMD

我有一个使用以下Dockerfile构建的图像:

FROM php:7-fpm
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint
ENTRYPOINT ["docker-entrypoint"]
Run Code Online (Sandbox Code Playgroud)

它使用自定义入口点,它是以下bash脚本:

#!/bin/bash
set -e
echo "STARTING PHP FPM, CMD $@"
docker-php-entrypoint "$@"
Run Code Online (Sandbox Code Playgroud)

在它的Dockerfile中定义的父图像的命令CMD ["php-fpm"]

现在我希望这个命令可以在我的图像中继承.但是,当我运行图像时,命令为空.这是docker run命令的输出:

启动PHP FPM,CMD

但是,如果我复制CMD ["php-fpm"]到我的自定义的末尾Dockerfile,输出是

启动PHP FPM,CMD php-fpm

[01-Nov-2017 20:04:02]注意:fpm正在运行,pid 7

[01-Nov-2017 20:04:02]注意:准备好处理连接

为什么父母的CMD指令没有继承?

docker dockerfile

9
推荐指数
1
解决办法
1013
查看次数

Laravel忽略了测试数据库连接

使用一个内存中的SQLite数据库迁移/因为它说回滚每一个测试我使用Laravel 5.3.22,想单元测试我的应用程序在这里.这是我的database.php配置的连接部分:

'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            ...
        ],

        'testing' => [
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        ],
Run Code Online (Sandbox Code Playgroud)

这是phpunit env配置:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="DB_CONNECTION" value="testing"/>
</php>
Run Code Online (Sandbox Code Playgroud)

phpunit配置暗示laravel shoud使用"testing"sqlite连接进行测试,但它并不关心并继续使用主mysql连接.这不是一个选项,我有一个庞大而复杂的架构,它不能用于使用mysql进行单元测试.我该怎么办?我无法模拟查询构建器,因为我需要断言它的结果.

php testing phpunit unit-testing laravel

7
推荐指数
1
解决办法
1087
查看次数

Docker-扩展父级的ENTRYPOINT

我有一个基于官方postgres图像的自定义图像,并且我想扩展父图像的入口点,以便如果每次容器启动时尚不存在新用户和数据库,它将创建新用户和数据库。可能吗?就像我的映像将​​执行标准入口点加上我自己的Shell脚本的所有命令一样。

我知道有关将自己的脚本放入/docker-entrypoint-initdb.d目录的信息,但似乎只有在首次创建该卷时它们才会执行。

postgresql docker

5
推荐指数
1
解决办法
3077
查看次数

Docker-检查postgres是否准备就绪

I have a Kong API Gateway container and a postgres container and I need to check whether postgres has started up and ready from the Kong container before running the migrations. I was thinking of installing the postgres client utilities into a custom image based on the official Kong image using RUN yum install postgresql -y && yum clean all in my Dockerfile and using either psql or pg_isready to achieve this. I've created a postgres user called polling with …

postgresql centos docker kong

5
推荐指数
4
解决办法
7633
查看次数

在 Symfony 中使用 OR 逻辑验证多个约束

我在请求中有一个字段,可以是电子邮件或电话。现在我需要根据两个约束来验证它 - 标准电子邮件约束和自定义电话。我知道我可以传递一系列约束链接:

$constraint = new Constraints\Collection([
            'name' => new Constraints\NotBlank(),
            'uid' => [new Constraints\Email(), new Constraints\Phone()],
            'pass' => new Constraints\NotBlank()
        ]);
Run Code Online (Sandbox Code Playgroud)

但是 Validator 将 AND 逻辑应用于约束数组,我需要 OR 以便如果该值适合其中之一,则验证成功。任何标准的 Symfony 手段都可以做到这一点吗?

php symfony symfony-validator symfony4

5
推荐指数
2
解决办法
837
查看次数

Spring Cloud Gateway - 剥离前缀(如果存在)

Host我需要 Spring Cloud Gateway 根据标头或路径前缀将请求路由到微服务。在任何情况下,都必须从路径中删除路径前缀,但前提是已设置路径前缀。

我想出了以下代码,我认为只有“sip”是前缀:

public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.host("sip")
                        .or()
                        .path("/sip/**")
                        .filters(f -> f.stripPrefix(1))
                        .uri("http://sip:8080")
                )
                .build();
}
Run Code Online (Sandbox Code Playgroud)

问题是 Spring 会删除路径的第一段,即使它不是前缀。

例如,具有路径的请求/sip/calls会成功,但/calls设置了 Host 标头则不会成功,因为 Spring 会考虑/calls前缀并将其删除,从而导致路径为空。/calls/calls带有标头的路径Host会成功,因为 Spring 仅删除第一个calls路径段。

如何一起使用主机和路径,仅在与定义的值匹配时才删除前缀?

ps 我正在考虑每个服务有两条路线,但它看起来不太好,尽管它实现了目标:

.route(r -> r.header("Host", "form").uri("http://form:8080"))
                .route(r -> r.path("/form/**")
                        .filters(f -> f.stripPrefix(1))
                        .uri("http://form:8080"))
Run Code Online (Sandbox Code Playgroud)

java spring spring-cloud spring-cloud-gateway

5
推荐指数
1
解决办法
1万
查看次数

MIN和MAX的MySQL索引

任何人都可以从官方MySQL 文档中澄清这一点

使用索引...查找特定索引列key_col的MIN()或MAX()值。这是由预处理器优化的,该预处理器检查是否在索引中出现在key_col之前的所有关键部分上使用WHERE key_part_N = constant。在这种情况下,MySQL对每个MIN()或MAX()表达式进行一次键查找,并将其替换为常量。如果所有表达式都用常量替换,查询将立即返回。例如:SELECT MIN(key_part2),MAX(key_part2)FROM tbl_name WHERE key_part1 = 10;

因此,在他们的示例中,他们试图找到称为key_col的col的最小值和最大值。他们使用复合索引key_part1_key_part2吗?索引的key_part2部分代表key_col列吗?

我绝对不明白他们要用常量替换表达式的意思。您能帮我解决这一点吗?

更新:问题不是关于WHERE语句或索引如何在“最高级别”上工作,如果我能这么说的话。在这个关于MIN和MAX的特定点上,这个处理器的表达式代替了我,对此我感到困惑。

mysql sql indexing optimization query-optimization

4
推荐指数
1
解决办法
5746
查看次数

Laravel 5.4 Webpack Mix - 合并SCSS和CSS

有没有办法合并SCSS和CSS?

目前我这样做如下,但它不起作用.下面的代码应该将scss编译成临时目录,然后将其与普通的css合并.

mix.sass('resources/assets/sass/app.scss', '../resources/assets/tmp_compilation_files/scss-assets.css').styles([ 'resources/assets/tmp_compilation_files/scss-assets.css', 'node_modules/isteven-angular-multiselect/isteven-multi-select.css' ], 'public/css/app.css');
Run Code Online (Sandbox Code Playgroud)

但没什么.public/css/app.css文件中缺少已编译的SASS.这太烦人了,这么简单的任务,这是不可行的.我能够用elixir - 将scss编译成tmp目录(./resources/tmp),然后使用styles()将其与css文件合并.

我还没有在文档中找到有关路径参数的任何信息 - 我在哪里指定绝对路径,相对于公共目录的位置?

laravel webpack laravel-5 laravel-mix

4
推荐指数
1
解决办法
1987
查看次数

Docker Kong 管理 API 无法访问

我已将Docker Kong 映像升级到版本 0.14.0,它停止响应来自容器外部的连接:

$ curl 127.0.0.1:8001 --trace-ascii dump.txt

== Info: Rebuilt URL to: 127.0.0.1:8001/
== Info:   Trying 127.0.0.1...
== Info: Connected to 127.0.0.1 (127.0.0.1) port 8001 (#0)
=> Send header, 78 bytes (0x4e)
0000: GET / HTTP/1.1
0010: Host: 127.0.0.1:8001
0026: User-Agent: curl/7.47.0
003f: Accept: */*
004c: 
== Info: Recv failure: Connection reset by peer
== Info: Closing connection 0
Run Code Online (Sandbox Code Playgroud)

端口映射是

0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp

尝试从容器内部连接时一切正常:

/ # curl 127.0.0.1:8001
{"plugins":{"enabled_in_cluster":[], ...
Run Code Online (Sandbox Code Playgroud)

端口 8000 可从容器外部和内部访问。那会是什么?

docker kong

4
推荐指数
1
解决办法
4962
查看次数

在 Hibernate 中将列名用双引号括起来

我正在使用 Spring JPA 2.0.9 和 Hibernate 5.3.5 和这个方言,通过 JDBC 使用官方 JDBC 驱动程序从这个发行版访问 FileMaker (v16) 数据库。

问题是生成的 SQL 最终是列名以相应的表名作为前缀,例如:

select 
marketingc0_.a__IDPK_MarketingCategory as a__IDPK_1_0_0_, marketingc0_.Active as Active2_0_0_
from MarketingCategories as marketingc0_
where marketingc0_.a__IDPK_MarketingCategory=1
Run Code Online (Sandbox Code Playgroud)

FileMaker 不会抱怨错误的语法:

[08007][27034] [FileMaker][FileMaker JDBC] FQL0001/(1:153):查询的语法有错误。

然而,如果列名用双引号括起来,它会毫无怨言地吞下 SQL:

select
    marketingc0_."a__IDPK_MarketingCategory" as a__IDPK_1_0_0_, marketingc0_."Active" as Active2_0_0_
    from MarketingCategories as marketingc0_
    where marketingc0_.a__IDPK_MarketingCategory=1
Run Code Online (Sandbox Code Playgroud)

我想出的解决方案是将这些引号包含在实体注释中:

public class MarketingCategory {
    @Id
    @Column(name = "\"a__IDPK_MarketingCategory\"")
    private Integer id;

    @Column(name = "\"a_ID_User\"")
    private Integer userId;

    @Column(name = "\"Active\"")
    private Boolean active; …
Run Code Online (Sandbox Code Playgroud)

java hibernate filemaker spring-data-jpa

3
推荐指数
1
解决办法
3555
查看次数