簡體   English   中英

我已經制作了一個dockerfile,我打算在AWS ECS上運行它,但是我不能按要求-t

[英]I have made a dockerfile and I was going to run it on AWS ECS but I cant as it requires -t

這是我的docker run,並且docker文件是為什么它需要-t並且在ECS上不工作的原因,感謝您的幫助。 我不明白-t會做什么,如果有人也可以提供幫助的話。

這只是一個連接到我的rds並使用wordpress的基本docker。 我沒有任何插件,因此,這正是我使用的主題。

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

我看到幾個問題。 首先,除非您打算使用shell與之交互,否則容器永遠不需要-t即可運行。 后台容器不需要交互式TTY界面,它們只是在后台自動運行。

其次,在您的docker文件中,我看到很多RUN語句,這些語句基本上是用於設置容器初始狀態的構建時間命令,但是您沒有任何CMD語句。

您需要CMD ,這是在您嘗試運行容器時實際啟動並在容器中啟動的過程。 RUN語句在初始docker構建期間僅執行一次,然后將這些run語句的結果保存到容器映像中。 當您運行Docker容器時,其初始狀態由RUN語句設置,然后CMD語句將啟動容器中正在運行的進程。

因此,看起來Dockerfile中的最后一個RUN應該是CMD因為Apache服務器是您要使用以前使用所有這些RUN語句設置的容器狀態運行的長時間運行的進程。

您應該做的另一件事是將許多連續的RUN語句鏈接成一個。 Docker為每個RUN命令創建一個單獨的層,其中每個層有點像容器狀態的Git提交。 因此,擁有如此多的RUN語句非常浪費,因為它占用了太多的容器層。 您可以一起執行以下這樣的ot鏈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

我建議您閱讀Docker的這份指南,該指南涵蓋編寫Dockerfile的最佳實踐: https ://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#cmd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM