команда cp в файле yaml - PullRequest
0 голосов
/ 08 июня 2018

Я запускаю модуль Glassfish в моем кластере Kubernetes, и я пытаюсь скопировать некоторые файлы .war из папки, которая находится на моем хосте, но команда cp всегда кажется неудачной.

myфайл yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: glassfish
spec:
# replicas: 2
 selector:
  matchLabels:
   app: glassfish
 strategy:
  type: Recreate
 template:
  metadata:
   labels:
    app: glassfish
  spec:
   containers:
   - image: glassfish:latest
     name: glassfish
     ports:
     - containerPort: 8080
       name: glassfishhttp
     - containerPort: 4848
       name: glassfishadmin
     command: ["/bin/cp"]
     args: #["/mnt/apps/*","/usr/local/glassfish4/glassfish/domains/domain1/autodeploy/"]
     - /mnt/apps/
     - /usr/local/glassfish4/glassfish/domains/domain1/autodeploy/
     volumeMounts:
     - name: glassfish-persistent-storage
       mountPath: /mount
     - name: app
       mountPath: /mnt/apps
   volumes:
   - name: glassfish-persistent-storage
     persistentVolumeClaim:
      claimName: fish-mysql-pvc
   - name: app
     hostPath:
      path: /mnt/nfs
      type: Directory

Я пытаюсь использовать в своем контейнере следующую команду:

cp /mnt/apps/* /usr/local/glassfish4/glassfish/domains/domain1/autodeploy

Что я делаю не так?

ИтакДо сих пор я пытался сделать это с / , без него, используя / * Когда я использую приложения / , я вижу «элемент или каталог не найден», когда я использую приложения / я получаю «каталог опущен»Мне нужно только то, что на карте, а не сама карта, поэтому -r на самом деле тоже не поможет.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Что я делаю не так?

вот правильная команда для выполнения:

command: ["sh", "-c", "cp -r /mnt/apps/* /usr/local/glassfish4/glassfish/domains/domain1/autodeploy/ && asadmin start-domain --verbose"]

С помощью команды cp вы фактически перезаписываете законную требуемую команду для запуска всего,Вы можете увидеть оригинал (работает нормально без команды cp), если осмотрите этот контейнер.Изначально контейнер запускается с:

...
"Cmd": [
    "/bin/sh", 
    "-c",
    "asadmin start-domain --verbose"
],
...

, просто добавляющим его после того, как команда копирования решит вашу проблему.

0 голосов
/ 08 июня 2018

Здесь необходимо отметить две вещи:

  1. Если вы хотите скопировать директорию, используя cp, вы должны предоставить флаг -a или -R для cp:
 -R    If source_file designates a directory, cp copies the directory and the entire subtree connected at
       that point.  If the source_file ends in a /, the contents of the directory are copied rather than
       the directory itself.  This option also causes symbolic links to be copied, rather than indirected
       through, and for cp to create special files rather than copying them as normal files.  Created
       directories have the same mode as the corresponding source directory, unmodified by the process'
       umask.

       In -R mode, cp will continue copying even if errors are detected.

Если вы используете /bin/cp в качестве точки входа в модуле, то эта команда не выполняется в оболочке.Однако * в /path/to/* является функцией оболочки.

initContainers не имеет args, только `команда.

Чтобы сделать это, используйте /bin/sh в качестве команды вместо:

command:
  - /bin/sh
  - -c
  - cp /mnt/apps/* /usr/local/glassfish4/glassfish/domains/domain1/autodeploy/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...