【问题标题】:How to put command of build docker container to dockerfile?如何将构建 docker 容器的命令放入 dockerfile?
【发布时间】:2021-01-05 06:56:07
【问题描述】:

我有脚本:docker run -it -p 4000:4000 bitgosdk/express:latest --disablessl -e test 如何将此命令与参数一起放入 dockerfile?

FROM bitgosdk/express:latest
EXPOSE 4000
???

【问题讨论】:

  • 所以命令只是 --disablessl -e testps -ef 在你正在运行的容器中的输出是什么?

标签: docker dockerfile


【解决方案1】:

通过你的Dockerfile contents

容器内运行的命令是:

/ # ps -ef | more
PID   USER     TIME  COMMAND
    1 root      0:00 /sbin/tini -- /usr/local/bin/node /var/bitgo-express/bin/bitgo-express --disablessl -e test

该命令之所以如此,是因为 Dockerfile 中设置的入口点是 ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/node", "/var/bitgo-express/bin/bitgo-express"],而参数 --disablessl -e test 是运行 docker run 命令时提供的参数。

--disablessl -e test 参数可以使用 CMD 在您的 Dockerfile 中设置:

CMD ["--disablessl", "-e","test"]

新的 Dockerfile

FROM bitgosdk/express:latest
EXPOSE 4000
CMD ["--disablessl", "-e","test"]

请参阅此以了解difference between entrypoint and cmd

【讨论】:

    【解决方案2】:

    你没有。 这就是 docker-compose 的用途。

    即创建一个docker-compose.yml,内容如下:

    version: "3.8"
    
    services:
      test:
        image: bitgodsdk/express:latest
        command: --disablessl -e test
        ports:
        - "4000:4000"
    

    然后在终端中执行以下命令以访问名为 test 的服务的交互式终端。

    docker-compose run test

    【讨论】:

    • 我通常认为 Compose command: 是一种覆盖,我会考虑设置一个默认的 Dockerfile CMD 更可取。
    • 是的。但如果这是唯一需要 Dockerfile 的东西,那么最好将其保留为 compose-file 覆盖并跳过使用自定义图像的麻烦。
    【解决方案3】:

    即使@mchawre's answer 似乎直接回答了 OP 的“语法上”问题(正如 Dockerfile 所问的那样),docker-compose.yml 绝对是制作docker run 命令的方法,因为 custom 可能是,可以以 声明性 方式重现(YAML 文件)。

    作为对@ChrisBecke's answer 的补充,请注意此 YAML 文件的编写可以自动化。参见例如 FOSS(根据 MIT 许可)https://github.com/magicmark/composerize

    FTR,下面的 sn-p 是从以下 docker run 命令自动生成的,使用随附的 webapp https://composerize.com/

    docker run -it -p 4000:4000 bitgosdk/express:latest

    version: '3.3'
    services:
        express:
            ports:
                - '4000:4000'
            image: 'bitgosdk/express:latest'
    

    我故意省略了CMD 参数--disablessl -e test,因为composerize 似乎不支持这些额外的参数。这听起来像是一个错误(和 FTR a related issue is opened),但同时它可能只是被视为一个功能,符合 @DavidMaze's comment...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      相关资源
      最近更新 更多