首页 > 解决方案 > 在 docker-compose 中运行 bash 命令

问题描述

我正在使用默认映像,我的要求是在运行 docker-compose 文件时运行一些 Linux 命令。os是redhat。这是我的 docker-compose 文件

version: '3.4'

services:
  rstudio-package-manager:
    image: 'rstudio/rstudio-package-manager:latest'
    restart: always
    volumes:
      - '$PWD/rstudio-pm.gcfg:/etc/rstudio-pm/rstudio-pm.gcfg'
    command: bash -c mkdir "/tmp/hello"
    ports:
      - '4242:4242'

这是错误:

rstudio-package-manager_1  | mkdir: missing operand
rstudio-package-manager_1  | Try 'mkdir --help' for more information.

任何帮助,将不胜感激

编辑

我必须在容器启动后运行一些命令。它也可以作为 bash 脚本添加。为此,我尝试了这个

version: '3.4'

services:
  rstudio-package-manager:
    privileged: true
    image: 'rstudio/rstudio-package-manager:latest'
    restart: always
    environment:
      - RSPM_LICENSE=1212323123123123
    volumes:
      - './rstudio-pm.gcfg:/etc/rstudio-pm/rstudio-pm.gcfg'
      - './init.sh:/usr/local/bin/init.sh'

    command:
    - init.sh
    ports:
      - '4242:4242'

init.sh里面是这个

alias rspm='/opt/rstudio-pm/bin/rspm'
rspm create repo --name=prod-cran --description='Access CRAN packages'
rspm subscribe --repo=prod-cran --source=cran

这也没有奏效。谁能帮我吗?

标签: linuxdockerdocker-composedockerfilecontainers

解决方案


您将 3 个参数传递给bash

  1. -c
  2. mkdir
  3. /tmp/hello

但你只需要通过两个:

  1. -c
  2. mkdir /tmp/hello

换句话说:-c期望一个“单词”跟随它。之后的任何内容都被视为位置参数。

所以:

bash -c 'mkdir /tmp/hello'


推荐阅读