如何将参数传递给应在容器中执行的shell脚本

时间:2019-09-22 20:59:53

标签: docker docker-compose

考虑我有这个docker-compose.yml

version: '3'
services:
  webapp:
   image: some_image:repo
   container_name: my_container
   ports:
    - "8080:8080"
    #entrypoint : /home/my_tool/
   command: bash -c "/home/my_tool/runSomeScript.sh argument1 argument2  && /bin/bash"
  stdin_open: true
  tty: true

这是我要运行的图像/容器中的脚本。

  $ cat runSomeScript.sh
  #!/bin/bash
  echo "First arg: $1"
  echo "Second arg: $2"

因此,当我执行docker-compose up命令时...我无法将参数传递给应该使用这些值执行bash脚本的容器...

需要注意的是,如果我仅在不使用参数的情况下这样做:

  command: bash -c "/home/my_tool/runSomeScript.sh && /bin/bash"

以及不含此类参数的脚本:

   $ cat runSomeScript.sh
  #!/bin/bash
  echo "First arg: ddd"
  echo "Second arg: fff"

然后容器ups并执行shell脚本。 但是,通过传递的参数将不起作用。我在这里想念的。

1 个答案:

答案 0 :(得分:0)

不要着迷于“保持容器运行”的技巧。让您的容器运行其过程,并在退出时退出容器。在Compose语法中,您可以将其简化为

(16, 2)

如果您想一次执行一次就可以启动它,可以docker-compose run,提供自己的命令行。

# Compose provides an sh -c '...' wrapper for you
# Do not try to run the main container process, then a shell
command: /home/my_tool/runSomeScript.sh argument1 argument2