Docker容器在主机上执行脚本

2ic8powd  于 2023-10-16  发布在  Docker
关注(0)|答案(1)|浏览(142)

我运行了一个节点服务器(在Docker容器中)来监听github webhook,这样我就可以在我的master更新时重新部署。我的主目录包含:

  1. production/
  2. app/webhooks/
  3. docker-compose-webhooks.yml
  4. deploy.sh

~/docker-compose-webhooks.yml

  1. version: '3'
  2. services:
  3. webhooks:
  4. image: node:10.11.0-alpine
  5. container_name: abis-webhooks
  6. working_dir: /webhooks
  7. environment:
  8. NODE_ENV: production
  9. PORT: 5050
  10. GITHUB_SECRET: ${GITHUB_SECRET}
  11. expose:
  12. - '5050'
  13. volumes:
  14. - ./app/webhooks:/webhooks
  15. command: /bin/sh -c 'npm install --production; npm start'

~/deploy.sh

  1. #!/bin/bash
  2. cd ~/production && git pull origin master
  3. ...
  4. ...

调用deploy.sh的最简单方法是什么?它显然位于node所在的容器之外。
我从另一篇文章中引用了这个,并将其添加到node中:

  1. exec(`docker run --rm -v /usr/bin:/usr/bin --privileged -v $(pwd)/depoly.sh:~/deploy.sh ubuntu bash ~/deploy.sh`)
ddarikpa

ddarikpa1#

您可以按照https://stackoverflow.com/a/63719458/7475450中的说明使用命名管道
或者,您可以通过ssh从容器在主机上执行脚本。范例:

  1. docker_hostname="my-host"
  2. docker_host_user="jimmyneutron"
  3. ssh $docker_host_user@$docker_hostname 'echo $HOSTNAME' # returns: my-host
  4. ssh $docker_host_user@$docker_hostname '~/deploy.sh' # run script on my-host

如果需要,您可以设置基于公钥的身份验证,以在主机上进行无密码ssh访问。参见https://linuxize.com/post/how-to-setup-passwordless-ssh-login/

相关问题