簡體   English   中英

在 docker-compose 中運行 bash 命令

[英]Run bash commands in docker-compose

我使用的是默認圖像,我的要求是在運行 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

這也沒有奏效。 誰能幫我嗎?

您將 3 arguments 傳遞給bash

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

但你只需要通過兩個:

  1. -c
  2. mkdir /tmp/hello

換句話說: -c期望后面跟着一個“單詞”。 之后的任何內容都被視為位置參數。

所以:

bash -c 'mkdir /tmp/hello'

根據您的編輯,聽起來您不想在運行容器時更改command ,但您想基於現有圖像創建派生圖像。

您需要一個Dockerfile來修改現有圖像並添加您的文件/應用您的修改。

docker-compose.yml

version: '3.4'

services:
  rstudio-package-manager:
    privileged: true
    build:
      context: folder_with_dockerfile
    image: your_new_image_name
    restart: always
    environment:
      - RSPM_LICENSE=1212323123123123
    volumes:
      - './rstudio-pm.gcfg:/etc/rstudio-pm/rstudio-pm.gcfg'
      - './init.sh:/usr/local/bin/init.sh'
    ports:
      - '4242:4242'

folder_with_dockerfile/Dockerfile

FROM rstudiol/rstudio-package-manager:latest

RUN alias rspm='/opt/rstudio-pm/bin/rspm' && \
  rspm create repo --name=prod-cran --description='Access CRAN packages' && \
  rspm subscribe --repo=prod-cran --source=cran
RUN commands in next layer
RUN commands in third layer

然后用docker-compose build構建新鏡像並正常啟動。 您還可以運行docker-compose up --build來構建和運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM