我已经做了一个dockerfile,我打算在AWS ECS上运行它,但是我不能,因为它需要-t

这是我的docker运行和docker文件有一个原因,为什么它需要-t和不是在ECS感谢任何帮助。 我不明白什么 – 如果有人也可以帮助,谢谢。

这只是一个基本的docker,连接到我的rds和使用wordpress。 我没有任何插件,身材匀称是我使用的主题。

command docker run -t --name wordpress -d -p 80:80 dockcore/wordpress FROM ubuntu #pt-get clean all RUN apt-get -y update RUN DEBIAN_FRONTEND=noninteractive apt-get -y install unzip wget mysql-client mysql-server apache2 libapache2-mod-php7.0 pwgen python-setuptools vim-tiny php7.0-mysql php7.0-lda RUN rm -fr /var/cashe/*files neeeded ADD wordpress.conf /etc/apache2/sites-enabled/000-default.conf # WordPress install RUN wget -P /var/www/html/ https://wordpress.org/latest.zip RUN unzip /var/www/html/latest.zip -d /var/www/html/ RUN rm -fr /var/www/html/latest.zip # Copy he wp config file RUN cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php # Expose web port EXPOSE 80 # wp config for database RUN sed -ie 's/database_name_here/wordpress/g' /var/www/html/wordpress/wp-config.php RUN sed -ie 's/username_here/root/g' /var/www/html/wordpress/wp-config.php RUN sed -ie 's/password_here/password/g' /var/www/html/wordpress/wp-config.php RUN sed -ie 's/localhost/wordpressrds.xxxxxxxxxxxxxx.ap-southeast-2.rds.amazonaws.com:3306/g' /var/www/html/wordpress/wp-config.php RUN rm -fr /var/www/html/wordpress/wp-content/themes/* RUN rm -fr /var/www/html/wordpress/wp-content/plugins/* ADD /shapely /var/www/html/wordpress/wp-content/themes/ # Start apache on boot RUN echo "service apache2 start" >> ~/.bashrc 

我看到一些问题。 首先你的容器不应该要求-t才能运行,除非它是一个临时容器,你打算使用一个shell进行交互。 后台容器不需要交互式TTY接口,它们只是在后台自主运行。

其次,在docker文件中,我看到很多RUN语句,这些语句基本上是用于设置容器初始状态的构build时间命令,但是您没有任何CMD语句。

您需要一个CMD ,当您尝试运行容器时,该过程实际上是在容器中启动并启动的。 RUN语句只在初始的docker build期间执行一次,然后这些run语句的结果被保存到容器映像中。 在运行docker容器时,它具有由RUN语句设置的初始状态,然后CMD语句会启动容器中正在运行的进程。

所以看起来Dockerfile中的最后一个RUN应该是一个CMD因为Apache服务器是一个长时间运行的进程,您希望以之前使用所有这些RUN语句设置的容器状态RUN

你应该做的另一件事是把许多连续的RUN语句链接成一个。 Docker为每个RUN命令创build一个单独的图层,其中每个图层类似于容器状态的Git提交。 所以有这么多的RUN语句是非常浪费的,因为它造成太多的容器层。 你可以像这样做一些链式的RUN语句,而不是做一个更小,更高效的容器:

 RUN apt-get -y update && \ DEBIAN_FRONTEND=noninteractive apt-get -y install unzip wget mysql-client mysql-server apache2 libapache2-mod-php7.0 pwgen python-setuptools vim-tiny php7.0-mysql php7.0-lda && \ rm -fr /var/cashe/*files neeeded 

我build议阅读Docker中的这个指南,其中包括编写Dockerfile的最佳实践: https ://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#cmd