微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Docker错误:从Win10运行时找不到或不存在容器命令

这真让我抓狂…

我有Win10,我已经安装了Docker ToolBox

Docker=1.10.2 Compose=1.6.0 VirtualBox=5.0.14

我已经在Linux [亚马逊linux]成功地启动了LAMP,但是当我尝试做同样的terminal响应与错误:容器命令未find或不存在”据我所知,Windows解释器的方式有问题CMD语法。

我努力了

_popen:不显示shell窗口(SW_HIDE)

cUrl:未定义的参考

防止事件C#冒泡

使用与Windows窗口

pip3输出新行而不是安装

- CMD ["/run.sh"] - ENTRYPOINT ["/run.sh"] - CMD /run.sh - CMD '/run.sh' - CMD run.sh - CMD "/run.sh"

但似乎没有任何工作。

注意:当我运行CMD /run.sh错误不会出现,但容器立即退出

注2:在AWS上尝试使用Docker-Machine设置LAMP时,我遇到了同样的问题

我有这个DockerfileLamp

FROM ubuntu # -- Install needed packages -- ENV DEBIAN_FRONTEND noninteractive # -- Install additional utilities -- RUN apt-get update && apt-get install -y supervisor git curl apache2 mcrypt cron wget nano unzip # -- Install PHP 5.5 -- RUN apt-get -y update && apt-get -y install PHP5 libapache2-mod-PHP5 MysqL-server-5.5 PHP5-MysqL pwgen PHP-apc PHP5-mcrypt PHP5-xdebug PHP5-gd PHP5-curl PHP-pear openssh-server PHP5-cli PHP5-apcu PHP5-intl PHP5-imagick PHP5-json # -- Set localhost to apache conf file -- RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf # -- Add image configuration and scripts -- ADD ./lamp/start-apache2.sh /start-apache2.sh ADD ./lamp/start-MysqLd.sh /start-MysqLd.sh ADD ./lamp/run.sh /run.sh RUN chmod 755 /*.sh ADD ./lamp/my.cnf /etc/MysqL/conf.d/my.cnf ADD ./lamp/supervisord-apache2.conf /etc/supervisor/conf.d/supervisord-apache2.conf ADD ./lamp/supervisord-MysqLd.conf /etc/supervisor/conf.d/supervisord-MysqLd.conf # -- Remove pre-installed database -- RUN rm -rf /var/lib/MysqL/* # -- Add MysqL utils -- ADD ./lamp/setup_MysqL.sh /setup_MysqL.sh RUN chmod 755 /*.sh # -- config to enable .htaccess -- ##ADD apache_default /etc/apache2/sites-available/000-default.conf RUN a2enmod rewrite # -- Environmental variables to configure PHP -- ENV PHP_UPLOAD_MAX_FILESIZE 10M ENV PHP_POST_MAX_SIZE 10M # -- Add volumes for MysqL -- ##VOLUME ["/etc/MysqL","/var/lib/MysqL" ] # -- Set up SSH server -- RUN mkdir /var/run/sshd RUN echo 'root:root' |chpasswd RUN sed -ri 's/^PermitRootLogins+.*/PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config ADD ./lamp/supervisord-openssh-server.conf /etc/supervisor/conf.d/supervisord-openssh-server.conf # -- Install Python & pip -- RUN apt-get update && apt-get upgrade -y && apt-get install -y python python-pip python-dev && pip install --upgrade pip # -- Install xvfb -- RUN apt-get install -y xvfb EXPOSE 80 3306 22 CMD /run.sh

run.sh

#!/bin/bash VOLUME_HOME="/var/lib/MysqL" sed -ri -e "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" -e "s/^post_max_size.*/post_max_size = ${PHP_POST_MAX_SIZE}/" /etc/PHP5/apache2/PHP.ini if [[ ! -d $VOLUME_HOME/MysqL ]]; then echo "=> An empty or uninitialized MysqL volume is detected in $VOLUME_HOME" echo "=> Installing MysqL ..." MysqL_install_db > /dev/null 2>&1 echo "=> Done!" /setup_MysqL.sh else echo "=> Using an existing volume of MysqL" fi exec supervisord -n

docker–compose.yml

lamp: # apache + MysqL/PHP build: . dockerfile: DockerfileLamp ports: - "8181:80" # open apache to public - "3333:3306" # open MysqL to public - "2222:22" # open SSH to public

Python脚本转换为可以自动更新的独立单个文件可执行文件

透明的窗口应用程序覆盖在Windows中

虚拟ListView不希望的checkBox行为使用ListView_HitTest检查LVHT_ONITEMSTATEICON标志与扩展样式LVS_EX_FULLROWSELECT

我们如何在Linux中使用sleep()来保持我们的cpu使用率合理,同时仍然具有适当的时间精度?

快速轻松地从一个文件加载所需的内容

Docker是以过程为中心的,换句话说,当你的CMD脚本死亡时,你的容器就会死亡。 在你的脚本运行结束…

tail -f logfile (where logfile is some logfile you are interested in)

这会

1 – 停止你的容器退出2 – 让你做

docker logs -f containerName

为了帮助你进行调试

3 – 让你进入与容器

docker exec -it bash containerName

然后,你可以运行你认为在容器内失败的命令,并尝试将其排除

虽然这不能直接回答你的问题,但应该给你足够的武器来解决这个问题

对于另一个项目,我尝试在Docker Machine上运行Windows。我遇到了docker-compose Container command not found or does not exist的同样的模糊错误信息。

你关于行结尾的评论引起我尝试在git-bash (多个脚本,在子文件夹中)中尝试dos2unix ./*/*.sh ,这为我解决了这个问题。

我的怀疑是, git clone保存与DOS行结尾的文件,导致顶部行不正确的语法!#/bin/bash 。

$ docker-compose -v docker-compose version 1.6.2,build e80fc83 $ docker version Client: Version: 1.10.3 API version: 1.22 Go version: go1.5.3 Git commit: 20f81dd Built: Thu Mar 10 21:49:11 2016 OS/Arch: windows/amd64 server: Version: 1.10.3 API version: 1.22 Go version: go1.5.3 Git commit: 20f81dd Built: Thu Mar 10 21:49:11 2016 OS/Arch: linux/amd64

我通过简化文件解决了它。 我评论了所有的控件,因为无论我尝试它会不断抛出Syntax Errors

#!/bin/bash VOLUME_HOME="/var/lib/MysqL" sed -ri -e "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" -e "s/^post_max_size.*/post_max_size = ${PHP_POST_MAX_SIZE}/" /etc/PHP5/apache2/PHP.ini #if [[ ! -d $VOLUME_HOME/MysqL ]]; then echo "=> An empty or uninitialized MysqL volume is detected in $VOLUME_HOME" echo "=> Installing MysqL ..." MysqL_install_db > /dev/null 2>&1 echo "=> Done!" /setup_MysqL.sh #else # echo "=> Using an existing volume of MysqL" #fi exec supervisord -n

它适用于我的情况,所以我不打算进一步调查。 干杯!

EDITED

上述解决方案并不完整。 它的工作原因是我正在从容器内部进行更改。

永久的解决方案是这样的:我将run.sh文件迁移到一个私有的Gist。 [它不需要是私有的,但是确定]我认为问题是,当我尝试从Windows机器[本地或云提供者]上构建Dockerfile时,会混淆语法,EOF,换行符等等。 所以我通过添加gist url来打破它

ADD http://gist_url/run.sh /run.sh

注1:您必须使用原始文件的URL,否则您将获得完整的HTML。

注2:私密性不受保护。您不需要身份验证来获取URL。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐