Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 40

0
votes
answers
21 views
+10

Dockerfile爲可執行文件構建圖像

0

Docker技術新增功能,我正在嘗試爲.exe文件構建和映像以及容器。Dockerfile爲可執行文件構建圖像

我的團隊已經在Windows上的visual studio中創建了一個exe文件來執行作業。現在我需要編寫一個dockerfile來創建一個圖像和容器。所以,當我開始我的容器時,工作必須運行。

這是我dockerfile是什麼樣子:

FROM microsoft/windowsservercore 
MAINTAINER [email protected] 
COPY . /app/ 
CMD ["/app/Controller.exe", "run"] 

我有我的切換碼頭工人到Windows容器。而當我試圖建立一個使用這個碼頭文件的圖像越來越低的錯誤。 enter image description here

+2

請[編輯您的問題](https://stackoverflow.com/posts/47615434/edit)粘貼圖像的內容作爲文本,縮進的空格。 –

沙发
0
0

此問題通常與強大的防病毒策略有關。看到這個related questionthis post。如果您有能力,請嘗試徹底禁用防病毒並重建。如果有效,您需要確定哪些政策阻礙了對C:ProgramDataDocker的訪問並添加排除。

0
votes
answers
18 views
+10

是什麼,如果我可以通過安裝搬運工引擎

-3

什麼是碼頭工人CE或碼頭EE的需要,如果我可以通過安裝搬運工引擎是什麼,如果我可以通過安裝搬運工引擎

沙发
0
0

泊塢窗改爲直接運行我的容器直接運行我的集裝箱碼頭工人或碼頭EE的需要Docker引擎到Docker CE的名稱。

很多公司都希望獲得企業支持和功能,這是您使用Docker EE所獲得的。 Docker EE也帶有價格標籤,而Docker CE則沒有。您可以構建/安裝Docker引擎,但無法訪問Docker的企業功能。

Docker的文檔非常好,你應該能夠在那裏找到更多的信息。

「需求」取決於您的要求。你甚至不需要Docker來運行一個容器。

0
votes
answers
27 views
+10

docker-compose,容器啓動後運行腳本?

1

我有一個服務,我通過碼頭工作人員通過牧場主進行創作。我遇到的問題是,我需要在部署容器後設置密碼。docker-compose,容器啓動後運行腳本?

牧場主祕密的工作方式是,我設置了我的祕密,牧場主將用包含我的祕密的文件在我的容器上裝入一個卷。我希望能夠執行腳本來獲取該祕密,並將其設置爲我的配置文件的密碼。

我不相信我有辦法通過Dockerfile獲得這個祕密,因爲我不想把祕密放在git中,所以我只能通過docker-compose來做這件事。

有誰知道這是可能的嗎?

+0

當然,這是設置祕密的一種相當普通的方式。只需將相關的shell腳本添加爲(或者)您的CMD或ENTRYPOINT即可。 –

沙发
0
0

docker-compose指定如何啓動容器,而不是如何修改現有的運行容器。

Rancher documentation提到,對於祕密的默認使用,您可以通過docker-compose.yml中的祕密數組中的名稱引用祕密。

目標文件名將與密碼的名稱相同。
默認情況下,目標文件名將被創建爲用戶ID和組ID 0,文件模式0444.
在祕密部分中將外部設置爲真將確保它知道祕密已經創建。的基本docker-compose.yml

實施例:

version: '2' 
services: 
    web: 
    image: sdelements/lets-chat 
    stdin_open: true 
    secrets: 
    - name-of-secret 
    labels: 
     io.rancher.container.pull_image: always 
secrets: 
    name-of-secret: 
    external: true 

如圖所示在 「How to Update a Single Running docker-compose Container」,更新的容器將涉及 「建造,殺死,和向上」 序列。

docker-compose up -d --no-deps --build <service_name> 
板凳
0
0

關鍵是要覆蓋排字命令調用原始命令之前執行任何你需要的初始化動作。

  1. 添加您的圖像的腳本,將執行所要像設置的密碼初始化工作,改變內部配置文件,等等。讓我們把它init.sh。你將它添加到你的圖像。

Dockerfile:

FROM: sourceimage:tag 
COPY init.sh /usr/local/bin/ 
  • 現在在你的搬運工撰寫文件,只需調用初始化腳本執行容器主要動作之前。
  • 泊塢窗,compose.yml:

    services: 
        myservice: 
        image: something:tag 
        ... 
        command: /usr/local/bin/init.sh && exec the_original_command_goes_here 
    

    它調用主命令之前使用exec是很重要的。這將安裝該命令作爲第一個進程(PID1),這將使其接收信號,如停止或終止。

    0
    votes
    answers
    27 views
    +10

    Docker-compose + Nginx SSL反向代理

    0

    我試圖使用Nginx設置反向代理,它也會爲後端服務提供https。Docker-compose + Nginx SSL反向代理

    我有3個容器,一個用於mongodb,一個用於我的.NET核心後端應用程序和一個用於反向代理。

    碼頭集裝箱似乎運作良好,直到香港專業教育學院設置HTTPS它運作良好。

    問題是,來自https://localhost:8080的請求未正確轉換爲在http端口上運行的.NET核心應用程序。

    問題出在我的Nginx配置文件中,但我不知道如何解決它。

    worker_processes 1; 
    
    events { worker_connections 1024; } 
    
    http { 
    
        sendfile on; 
    
        upstream web { 
         server web:443; 
        } 
    
        server { 
         listen 8080; 
    
         location /upstream { 
          proxy_pass   https://web; 
          proxy_ssl_certificate  /etc/nginx/cert.pem; 
          proxy_ssl_certificate_key /etc/nginx/privkey.pem; 
          proxy_ssl_session_reuse on; 
          proxy_redirect  off; 
          proxy_set_header Host $host; 
          proxy_set_header X-Real-IP $remote_addr; 
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
          proxy_set_header X-Forwarded-Host $server_name; 
         } 
        } 
    
        server { 
         listen 443 ssl; 
    
         ssl_certificate_key /etc/nginx/privkey.pem; 
         ssl_client_certificate /etc/nginx/cert.pem; 
         ssl_verify_client  off; 
    
         location/{ 
          proxy_pass http://web; 
         } 
        } 
    } 
    

    當我這樣做的HTTP請求,生病用https://localhost:8080時,它會返回ERR_SSL_PROTOCOL_ERROR拿回502網關錯誤。

    在終端中,nginx的容器返回

    enter image description here

    任何想法?

    +0

    你是什麼意思'沒有正確翻譯?哦 - 你可能會嘗試添加'X-Forwarded-Proto',你的應用程序需要相信它..也許相關:https://forums.iis.net/t/1178094.aspx?Rewriting+HTTPS+variable+based+ on + value + of + X + Forwarded + Proto – gusto2

    +0

    如果有幫助,你可以試試這個:https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion – Evis

    沙发
    0
    0

    閱讀了一下後,文檔我找到了解決方案。

    worker_processes 1; 
    
    events { worker_connections 1024; } 
    
    http { 
    
        sendfile on; 
    
        upstream web { 
         server web:80; 
        } 
    
        server { 
         listen 8080 ssl; 
    
         ssl_certificate   /etc/nginx/cert.pem; 
         ssl_certificate_key  /etc/nginx/privkey.pem; 
    
         location/{ 
          proxy_pass   http://web; 
          proxy_redirect  off; 
          proxy_set_header Host $host; 
          proxy_set_header X-Real-IP $remote_addr; 
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
          proxy_set_header X-Forwarded-Host $server_name; 
          proxy_set_header X-NginX-Proxy true; 
         } 
        } 
    } 
    
    0
    votes
    answers
    22 views
    +10

    在另一個docker鏡像(php,nodejs,phantomjs)中使用單命令docker鏡像

    0

    我有兩個docker鏡像:php和phantomjs。我使用它們來構建簡單的命令行腳本應用程序。 也即時有方便run.bat腳本,其中包含:在另一個docker鏡像(php,nodejs,phantomjs)中使用單命令docker鏡像

    docker run -it --rm --name my-running-script -v %cd%:/usr/src/myapp -w /usr/src/myapp php:7.0-cli php 我該怎麼做才能將nodejs添加到我的php圖像? 我希望能夠在php容器內使用諸如「phantomjs --help」之類的東西。

    我試着搜索類似問題的文檔,但沒有找到任何提示。

    這是使用即時通訊phantomjs圖像:https://hub.docker.com/r/wernight/phantomjs/ PHP的圖像即時通訊使用: https://hub.docker.com/_/php/

    沙发
    0
    1

    如果你想你的PHP容器內phantomjs,而不是使用兩個搬運工圖像一個與php和其他與phantomjs你只需要用這兩個軟件包構建自己的cutom docker鏡像。

    看來你正在使用debian:stretch作爲基礎圖像phantomjshttps://hub.docker.com/r/wernight/phantomjs/~/dockerfile/

    你只需要谷歌在Debian安裝PHP。可能它應該在dockerfile apt-get install -y php中多出一行。然後建立這個圖像並使用它。

    0
    votes
    answers
    22 views
    +10

    駱駝 - 如何移動碼頭集裝箱外的文件

    0

    我有一個容器內的彈簧啓動應用程序,我用駱駝來讀取一些文件,但我需要告訴駱駝開始讀取容器外,然後將相同的文件移動到一個這也是在容器外具體路徑,有人可以幫我?駱駝 - 如何移動碼頭集裝箱外的文件

    這是我的代碼:

    @Component 
    public class Controlador extends RouteBuilder { 
    
        @Autowired 
        Procesador objProcesador; 
    
        @Override 
        public void configure() throws Exception { 
         from("ftp://[email protected]:port?password=password&passiveMode=true&delete=true").streamCaching().convertBodyTo(InputStream.class).process(objProcesador).to("/var/lib"); 
        } 
    
    } 
    

    在此先感謝

    +0

    使用[移動](http://camel.apache.org/file2.html)URI選項而不是刪除。 https://stackoverflow.com/questions/19905462/how-to-rename-and-move-the-file-on-ftp-once-processed-by-camel – Bedla

    +0

    是的,這將移動該文件,但我怎麼能指定一個在容器外面的路徑? –

    +0

    不確定你對「容器外」意味着什麼。如果這意味着在遠程FTP服務器上移動文件,那麼從camel-file2組件繼承的「move」選項應該可以工作 – Bedla

    沙发
    0
    1

    你怎麼在容器外的意思是?如果您的意思是運行容器的主機上的路徑,則需要將該路徑作爲卷共享。在使用"docker run.."時或在Dockerfile中設置音量。如果您的意思是駱駝應該通過ftp或sftp獲取文件,請確保容器可以先訪問該站點。

    +0

    是的,我需要一個來自主機的文件,但是有可能在兩個不同的路徑之間讀取和移動文件?因爲我需要從/ mnt /文件讀取文件,但後來將文件移動到主機上的另一個位置例如/ var/lib/files –

    +0

    是的。這兩個路徑必須被模仿爲[卷](https://docs.docker.com/engine/admin/volumes/volumes/#create-and-manage-volumes),以便容器可以訪問它。然後,您可以使用具有相對或絕對路徑的&移動選項來安裝音量。 – Bedla

    +0

    主機上需要的任何路徑都需要作爲卷裝入,以便容器到達它。 –

    0
    votes
    answers
    33 views
    +10

    Apache進程不會在與RabbitMQ斷開連接後死亡

    0

    我試圖在我的項目中使用Server Side Events機制。 (這類似於類固醇上的長輪詢)Apache進程不會在與RabbitMQ斷開連接後死亡

    來自「Sending events from the server」字幕的例子效果非常好。幾秒鐘後,斷開連接,apache進程終止。此方法工作正常。

    但是!如果我嘗試使用RabbitMQ,則在瀏覽器從服務器斷開連接後,Apache不會導致進程中斷(es.close())。並且進程保持原樣並在docker容器重新啓動後纔會被殺死。

    connection_abortedconnection_status根本不起作用。 connection_aborted僅返回0,即使斷開連接,connection_status也返回CONNECTION_NORMAL。只有當我使用RabbitMQ時纔會發生。沒有RMQ這個功能運作良好。

    ignore_user_abort(false)也不起作用。

    代碼示例:

    <?php 
    use PhpAmqpLibChannelAMQPChannel; 
    use PhpAmqpLibConnectionAbstractConnection; 
    use PhpAmqpLibExceptionAMQPTimeoutException; 
    use PhpAmqpLibMessageAMQPMessage; 
    
    class RequestsRabbit 
    { 
        protected $rabbit; 
    
        /** @var AMQPChannel */ 
        protected $channel; 
    
        public $exchange = 'requests.events'; 
    
        public function __construct(AbstractConnection $rabbit) 
        { 
         $this->rabbit = $rabbit; 
        } 
    
        public function getChannel() 
        { 
         if ($this->channel === null) { 
          $channel = $this->rabbit->channel(); 
    
          $channel->exchange_declare($this->exchange, 'fanout', false, false, false); 
    
          $this->channel = $channel; 
         } 
    
         return $this->channel; 
        } 
    
        public function send($message) 
        { 
         $channel = $this->getChannel(); 
    
         $message = json_encode($message); 
    
         $channel->basic_publish(new AMQPMessage($message), $this->exchange); 
        } 
    
        public function subscribe(callable $callable) 
        { 
         $channel = $this->getChannel(); 
    
         list($queue_name) = $channel->queue_declare('', false, false, true, false); 
    
         $channel->queue_bind($queue_name, $this->exchange); 
    
         $callback = function (AMQPMessage $msg) use ($callable) { 
          call_user_func($callable, json_decode($msg->body)); 
         }; 
    
         $channel->basic_consume($queue_name, '', false, true, false, false, $callback); 
    
         while (count($channel->callbacks)) { 
          if (connection_aborted()) { 
           break; 
          } 
    
          try { 
           $channel->wait(null, true, 5); 
          } catch (AMQPTimeoutException $exception) { 
          } 
         } 
    
         $channel->close(); 
         $this->rabbit->close(); 
        } 
    } 
    

    會發生什麼:

    • 瀏覽器建立連接SSE到服務器。 var es = new EventSource(url);
    • Apache2產生新的進程來處理這個請求。
    • PHP生成一個新的隊列並連接到它。
    • 瀏覽器關閉連接es.close()
    • Apache2不會終止進程並保持原樣。 RabbitMQ隊列不會被刪除。如果我做了一些重新連接,它會產生一堆進程和一堆隊列(1重新連接= 1進程= 1隊列)。
    • 我關閉所有選項卡 - 活動進程。我關閉瀏覽器 - 相同的情況。

    尋找某種類型的PHP錯誤。還是Apach2?

    我用什麼:

    一些截圖:

    RabbitMQ queues

    Processes

    請幫我弄清楚是怎麼回事...

    附:對不起我的英語不好。如果您可以找到錯誤或錯字,請在評論中指出它。我會很感激:)

    沙发
    0
    0

    ,如果你在你的服務器端事件使用send()subscribe()(或兩者)你不說。假設你正在使用subscribe()沒有錯誤。這個循環:

    while (count($channel->callbacks)) { 
        if (connection_aborted()) { 
         break; 
        } 
    
        try { 
         $channel->wait(null, true, 5); 
        } catch (AMQPTimeoutException $exception) { 
        } 
    } 
    

    將運行,直到進程被殺死或連接遠離的RabbitMQ關閉。收聽排隊消息時這是正常的。如果你需要在某個時候停止循環,你可以設置一個變量來檢查循環,或者在SSE結束時拋出異常(儘管我覺得這很尷尬)。

    +0

    編號進程不會被apache2殺死。這是自2004年以來最古老的錯誤 - https://bugs.php.net/bug.php?id=30301。 'connection_aborted'和'connection_status'函數不起作用。而這些無法解決它。對我來說,最好使用Websocketd(最後用D) –

    0
    votes
    answers
    20 views
    +10

    當k8s活性探針失敗時,發送到在容器中運行的進程的信號是什麼? KILL或TERM

    0

    我有一個用例來優雅地終止容器,在那裏我有一個腳本,通過使用命令「kill PID」從容器內優雅地終止進程(它將發送TERM信號) 但我有活性探測器也配置好。 當前生命力探測器配置爲以60秒間隔進行探測。因此,如果在發送正常終止信號後不久發生活性探測,則當終止仍在進行時,容器的整體健康狀況可能變得非常關鍵。 在這種情況下,活性探測將失敗,容器將立即終止。當k8s活性探針失敗時,發送到在容器中運行的進程的信號是什麼? KILL或TERM

    所以我想知道kubelet是否用TERM或KILL殺死容器。

    感謝您的支持 預先感謝

    沙发
    0
    2

    在Kubernetes,活性探針檢查一個集裝箱的健康狀態。

    若要回答您的問題是否使用SIGKILL或SIGTERM,答案都是使用,但按順序。所以這裏是發生了什麼。

    1. 活躍度探針檢查失敗
    2. Kubernetes站流量路由到容器
    3. Kubernetes重新啓動容器
    4. Kubernetes再次開始

    路由流量到容器容器重啓,SIGTERM首先發送,等待參數化寬限期,然後Kubernetes發送SIGKILL。

    圍繞您的問題一個黑客是使用屬性:

    timeoutSeconds 
    

    這指定它被認爲失敗之前的請求還能走多久迴應。如果應用程序聯機所用的時間可預測,則可以添加和調整此參數。

    此外,您可以在livenessProbe之前使用readinessProbe進行遊戲,並在重新啓動過程後使容器投入使用。請參閱https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/以獲取有關使用哪些參數的更多詳細信息。

    0
    votes
    answers
    17 views
    +10

    VSTS推碼器 - 撰寫到Azure容器註冊表和Web應用程序

    1

    我想配置從VSTS到Azure容器註冊表的持續集成,然後再配置到WebApp。VSTS推碼器 - 撰寫到Azure容器註冊表和Web應用程序

    這裏是我的泊塢窗,compose.yml文件: 正如你可以看到我使用的是一個Asp.Net核心+ MSSQL。 版本: '3'

    services: 
        api: 
        image: tbacr.azurecr.io/myservice/api 
        container_name: api 
        build: 
         context: ./Api 
         dockerfile: Dockerfile 
        ports: 
         - "8000:80" 
        depends_on: 
         - db 
        db: 
        image: "microsoft/mssql-server-linux" 
        container_name: mssql 
        environment: 
         SA_PASSWORD: "testtest3030!" 
         ACCEPT_EULA: "Y" 
         MSSQL_PID: "Developer" 
        ports: 
         - "127.0.0.1:8001:1433" 
    

    下面是從VSTS我的任務: enter image description here

    而且我覺得主要任務是構建服務PublishServices 所以,請大家看下面: 建設服務 enter image description here

    PublishServices enter image description here

    最後,在Azure的集裝箱註冊表我: enter image description here

    所以,問題是我怎麼能部署到Web應用程序的。我已嘗試右鍵單擊api:最新存儲庫並部署到WebApp,但端點沒有響應

    +0

    +1,因爲我試圖找出我的構建與泊塢窗,撰寫,而不是爲每個(當前5)服務構建步驟,以及你的一些設置,從你的屏幕截圖幫助,十分感謝! – Kieron

    沙发
    0
    0

    即時VSTS有兩個步驟:構建和發佈。看起來你的構建部分是可以的。所以你的docker映像被推入你的repo。然後,您必須在VSTS中配置構建部分,以獲取您剛剛推入回購站的映像並將其部署到服務器上。

    HTH

    +0

    ,但正如你所看到的,我只有一個圖像在我的Azure註冊表容器(用於api)。怎麼樣的圖像爲mssql? – Cieja

    +0

    您的數據庫的碼頭圖像是官方圖像,因此它是公開的。我想你的目標服務器有docker,所以它可以下載它。 –

    +0

    @Fiver Optic好的,我明白了,但是當我將標籤91部署到容器的web應用程序並嘗試在瀏覽器中打開uri時,我得到了HTTP 503,你知道我在做什麼錯了嗎? – Cieja

    0
    votes
    answers
    19 views
    +10

    的源代碼出爐容器

    0

    我在哪裏可以找到谷歌烘烤容器的源代碼,像這樣的一個動物園管理員?:的源代碼出爐容器

    gcr.io/google_containers/kubernetes-zookeeper 
    

    乾杯

    沙发
    0
    0

    取決於容器維護者。對於所提供的例子:

    https://github.com/kow3ns/kubernetes-zookeeper 
    

    尋找相關dockerfiles的更多信息:

    我只是用Google搜索:gcr.io/google_containers/kubernetes-zookeeper dockerfile