将额外命令从 bitbucket-piplines.yml 传递到 docker 镜像

zan*_*war 10 mysql bitbucket docker bitbucket-pipelines

mysql:5.7尝试使用 Bitbucket Pipelines设置 docker 映像的默认字符集和排序规则,文档提到得有点含糊:

如果需要进一步配置底层数据库引擎,请参考Docker Hub官方镜像

bitbucket 文档发送给您的这个页面表明这是可能的......至少通过 docker:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collat​​ion-server=utf8mb4_unicode_ci

所以我的问题是如何传递这些参数:--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

我见过人们command:在 YML 中使用 bitbucket-pipelines 参数,但是 bitbucket 上的管道配置编辑器说它在那里无效:

definitions:
  services:
    mysql:
      image: mysql:5.7
      command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
      ports:
        - "3306:3306"
      variables:
        MYSQL_DATABASE: $MY_DATABASE
        MYSQL_ROOT_PASSWORD: $MY_PW
Run Code Online (Sandbox Code Playgroud)

the*_*ing 2

目前似乎无法将命令传递给作为服务运行的容器。我能够找到定义管道的 YAML 文件的架构(检查第 365 行)。不仅不能设置命令,也不能设置端口。幸运的是,3306是默认的。

作为解决方法,我建议您基于 构建自己的 Docker 映像mysql:5.7并将CMD语句更改为mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci(您可以从此处mysql查看映像的CMD外观)。之后,您必须将映像推送到 Bitbucket 运行程序可以访问的注册表,并将该映像用于您的管道。

以下 Dockerfile 可能适合您:

FROM mysql:5.7

CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
Run Code Online (Sandbox Code Playgroud)

最后,您的定义将如下所示:

definitions:
  services:
    mysql:
      image: your-custom-mysql-image:5.7
      variables:
        MYSQL_DATABASE: $MY_DATABASE
        MYSQL_ROOT_PASSWORD: $MY_PW
Run Code Online (Sandbox Code Playgroud)