无法为docker容器执行脚本?

时间:2017-12-26 19:13:35

标签: linux bash shell docker

我不知道为什么但我似乎无法从主机系统在docker容器内运行此脚本

在主机上我在shell脚本中执行此代码

#!/bin/bash

Docker_wordpress_status_check () {
mysql_docker_status=$(docker container ls | grep -E 'docker_image_name|dockerwordpressmaster_wp-fpm_1')
if [[ "$mysql_docker_status" ]]; then
echo "checking to see if wordpress exists"
wget https://s3/wordpress_staging_to_production_image_fixer.sh
chmod +x wordpress_staging_to_production_image_fixer.sh
docker cp wordpress_staging_to_production_image_fixer.sh dockerwordpressmaster_wp-fpm_1:/var/www/html/wordpress_staging_to_production_image_fixer.sh
docker exec -it dockerwordpressmaster_wp-fpm_1 sh -c "./wordpress_staging_to_production_image_fixer.sh"
fi
}

Docker_wordpress_status_check

这个脚本大部分工作正常,我甚至可以在正确的目录中看到该文件

/var/www/html/

我可以清楚地看到该文件存在于容器

docker exec -it dockerwordpressmaster_wp-fpm_1 sh
/var/www/html # ls -l | grep wordpress_staging_to_production_image_fixer.sh
-rwxr-xr-x    1 500      500            898 Dec 26 17:31 
wordpress_staging_to_production_image_fixer.sh

然而,当我尝试从容器

中执行脚本时
docker exec dockerwordpressmaster_wp-fpm_1 sh ./var/www/html/wordpress_staging_to_production_image_fixer.sh
  

sh:无法打开' ./ var / www / html / wordpress_staging_to_production_image_fixer.sh'

docker exec dockerwordpressmaster_wp-fpm_1 "sh" -c "/var/www/html/wordpress_staging_to_production_image_fixer.sh"
  

sh:/var/www/html/wordpress_staging_to_production_image_fixer.sh:not found

docker exec dockerwordpressmaster_wp-fpm_1 sh -c wordpress_staging_to_production_image_fixer.sh
  

sh:wordpress_staging_to_production_image_fixer.sh:未找到

docker exec dockerwordpressmaster_wp-fpm_1 bash ./var/www/html/wordpress_staging_to_production_image_fixer.sh
  

bash:./ var / www / html / wordpress_staging_to_production_image_fixer.sh:没有这样的文件或目录

我不太确定我做错了,因为文件没有执行 我意识到所有者可能不正确,因此我可能无法运行该脚本

docker exec dockerwordpressmaster_wp-fpm_1 sh chown root:root /var/www/html/wordpress_staging_to_production_image_fixer.sh
  

sh:不能打开' chown'

非常感谢您解决此问题的任何帮助

1 个答案:

答案 0 :(得分:1)

由于两个原因,以下声明可能对您不起作用

docker exec dockerwordpressmaster_wp-fpm_1 "sh" -c "/var/www/html/wordpress_staging_to_production_image_fixer.sh"

一个是Access问题,另一个是shell脚本开头缺少的shebang #!/bin/sh。您的错误是" sh:/var/www/html/wordpress_staging_to_production_image_fixer.sh:找不到"。这肯定表明访问问题。所以你需要chown to root:root或使用id为500的用户登录。

  

docker exec sh -c" pwd&& chown root:root wordpress_staging_to_production_image_fixer.sh&& sh wordpress_staging_to_production_image_fixer.sh"