【问题标题】:Issue running command in docker-compose在 docker-compose 中发出运行命令
【发布时间】:2018-06-07 10:59:31
【问题描述】:

我正在 docker compose 中构建一个自定义的 Postgresql 映像,并且在成功构建之后,我试图在 compose 文件的命令标签中运行一个 JAR 文件。是否可以从撰写文件运行 JAR?我的 docker-compose 文件如下所示:

version: '2'

services:
  pg-master:
    build: .
    ports:
      - "5434:5432"
    container_name: pg_master
    command: java -Dlog4j.configuration=file:log4j.xml -jar abc.jar ABC

【问题讨论】:

  • 这可能会覆盖启动 postgres 的默认命令。这种情况下服务器会启动吗?
  • 不,容器没有运行;它抛出了一些异常

标签: docker-compose docker-command


【解决方案1】:

试试这个。像这样在当前目录中创建一个 init.sh 文件

#!/bin/bash
java -Dlog4j.configuration=file:log4j.xml -jar abc.jar ABC

你的 Dockerfile 应该是这个样子(我这里也安装了 jre)

FROM library/postgres:9.6.3
RUN apt-get update
RUN apt-get -y install default-jre
COPY init.sh /docker-entrypoint-initdb.d/
COPY log4j.xml /docker-entrypoint-initdb.d/
COPY abc.jar /docker-entrypoint-initdb.d/

从 docker-compose 文件中删除命令属性

【讨论】:

  • 虽然我附加了命令,但容器没有启动。没有附加它正在工作,然后我可以访问容器 bash 并可以从中成功运行 java 命令。在不使用任何 .sh 文件的情况下,我想从 dockerfile 或 docker0compose 文件中完成任务;有可能吗?
  • 我认为这是不可能的,甚至是不可取的。如果您弄乱了命令/入口点,那么 postgres 服务器将无法启动。 init.sh 文件将在启动时运行,因此它基本上实现了相同的目的。 docker 有一些事情,你最好编写脚本,例如如果要切换 jar 文件,请编写一个脚本来复制文件,然后启动 docker-compose 构建。如果其他人愿意参与,很高兴在这件事上犯错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多