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 Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 44

0
votes
answers
9 views
+10

如何訪問像PostgreSQL的docker cli

0

我在遠程機器上安裝了Docker CE。我想從PostgreSQL這樣的本地機器上使用docker cli。如何訪問像PostgreSQL的docker cli

我總是這樣鍵入登錄和執行PostgreSQL。

$ psql -U username -p 5432 -h myserver -d db -c 'SELECT * FROM tbl' 

有沒有人有任何想法?

+0

你暴露的端口的更多信息? – Kilian

+0

我想只處理docker守護進程而不是docker容器。 –

+0

哦,對不起,你可以查看這個https://www.kevinkuszyk.com/2016/11/28/connect-your-docker-client-to-a-remote-docker-host/ – Kilian

沙发
0
0

如果我正確理解您的問題,您將在一臺機器上運行Docker客戶端,並且希望使用它來管理遠程運行的Docker主機。

爲此,您可以將DOCKER_HOST環境變量設置爲遠程計算機。如果您正在遠程訪問機器,請使用TLS,否則任何人都可以遠程訪問您的Docker守護程序。

舉個例子:

DOCKER_HOST=tcp://<remote docker host IP>:2376 
DOCKER_CERT_PATH=<path to cert> 
DOCKER_TLS_VERIFY=1 

如果你不想設置ENV變量,你可以指定在CLI主機每一次 - 這個例子顯示位於遠程主機上的版本泊塢窗<remote docker host IP>並使用當前目錄中的TLS證書進行身份驗證。

docker --tlsverify  
--tlscacert=ca.pem  
--tlscert=cert.pem  
--tlskey=key.pem  
-H=<remote docker host IP>:2376  
version 

有關保護泊塢窗守護退房??

0
votes
answers
9 views
+10

如何從服務器的公共IP訪問碼頭集裝箱

0

我試圖使用碼頭在服務器上部署我的網站。我有一個與centOS和碼頭安裝在它上面的液滴。當我嘗試運行一個容器(https://hub.docker.com/r/richarvey/nginx-php-fpm/)時,我期望通過我的瀏覽器使用公共IP(ipv4)訪問我的網站,但我認爲這還不夠。如何從服務器的公共IP訪問碼頭集裝箱

有什麼問題?

+0

您啓動容器時採取了哪些步驟?你能從127.0.0.1上的服務器訪問它嗎?我猜測這個端口沒有暴露在公共IP上。 – ext

沙发
0
0

您需要將容器端口發佈到主機。有關詳細信息,請參見https://docs.docker.com/engine/reference/run/#expose-incoming-ports

docker run -d -p 80:80 -p 443:443 richarvey/nginx-php-fpm 
0
votes
answers
8 views
+10

如何在Alpine linux上添加用於nginx的Lua模塊?

0

我想在啓用Lua模塊的情況下爲nginx提供精簡的Docker鏡像。我如何基於Alpine linux創建這個?如何在Alpine linux上添加用於nginx的Lua模塊?

沙发
0
-1

你看看在泊塢樞紐

https://hub.docker.com/

,你會發現Nginx上圖像的基礎上,高山Linux的,和Lua支持

一些例子

https://hub.docker.com/r/ilagnev/alpine-nginx-lua/

https://hub.docker.com/r/firesh/nginx-lua/

看一看的Dockerfile更多細節

+0

我發現這兩個,但發現沒有兩個是最新(最後推一年前)。另外,他們缺乏關於如何啓用模塊的信息。 – Marian

+0

這個文檔是否正確? https://github.com/openresty/lua-nginx-module#installation – user2915097

板凳
0
1

這裏是一個Dockerfile

FROM alpine:3.6 

RUN apk add --no-cache nginx-mod-http-lua 

# Delete default config 
RUN rm -r /etc/nginx/conf.d && rm /etc/nginx/nginx.conf 

# Create folder for PID file 
RUN mkdir -p /run/nginx 

# Add our nginx conf 
COPY ./nginx.conf /etc/nginx/nginx.conf 

CMD ["nginx"] 

安裝nginx-mod-http-lua包也將安裝nginxluajit,等等。

nginx.conf至少應包含這樣的:

load_module /usr/lib/nginx/modules/ndk_http_module.so; 
load_module /usr/lib/nginx/modules/ngx_http_lua_module.so; 

pcre_jit on; 

events { 
    worker_connections 1024; 
} 

daemon off; 
+0

如果你沒有從默認的[nginx中刪除include/etc/nginx/modules/*。conf;'這些'load_module'的.conf](https://github.com/alpinelinux/aports/blob/954391ce7493439d12180d5c5118dee26f8ac587/main/nginx/nginx.conf#L15)。 –

+0

@Marian:我們如何在這種情況下安裝luarocks?我確實找到了luajit的包含路徑。 – Raeesaa

0
votes
answers
8 views
+10

Bazel:在container_image中包含runfiles

1

使用container_image規則創建Docker圖像時,映像中不存在必要的運行文件。 pkg_tar規則也是如此,看起來實際上是這個問題。Bazel:在container_image中包含runfiles

用下面BUILD文件,我預計sh_binarytool_b出現在tool_a的runfiles。

container_image(
    name = "my image", 
    base = "@bash//image", 
    directory = "/usr/local/opt", 
    files = [":tool_a"], 
) 

sh_binary(
    name = "tool_a", 
    visibility = ["//visibility:public"], 
    srcs = ["tool_a.sh"], 
    data = [":tool_b"], 
) 

sh_binary(
    name = "tool_b", 
    visibility = ["//visibility:public"], 
    srcs = ["tool_b.sh"], 
) 

圖像但只包含tool_a.shtool_a包裝。

我怎樣才能包含runfiles呢?

沙发
0
0

不幸的是,你不能開箱即用。這是包裝規則中的longstanding defect

+0

我以前見過那個線程。太糟糕了,改變被放棄了。是否有可能以某種方式解決這個問題? – thertweck

0
votes
answers
7 views
+10

如何發佈到外部IP?

2

問題:如何發佈到外部IP?

我試圖做一個POST請求對谷歌雲計算平臺上的計算引擎實例中運行的泊塢實例。

我得到以下錯誤:

ERROR: Error: connect ETIMEDOUT ExternalIP:Port

我做了什麼錯?


編輯:防火牆規則缺失允許TCP:端口入口。這解決了上述錯誤。

現在我有以下錯誤:

Error: connect ECONNREFUSED ExternalIP:Port 

正在發生的事情是,我試圖連接到從我的本地節點,但該節點被配置爲只接受故意從自身的要求(計算引擎實例):

https://github.com/clemahieu/raiblocks/wiki/Docker-node

(我既沒有 「-P 127.0.0.1:7076:7076」)

我試着需要找到一種安全地向節點發出請求而不讓任何人(但我的本地機器和我將在其上託管我的網站的服務器)訪問節點的方法。

我添加了一個防火牆規則,允許從IP地址訪問,但它沒有改變任何東西。

任何想法?


CODE:

request.post(
    { 
     url: 'https://ExternalIP:Port', 
     json: { 
      action: '…', 
      item1: '…' 
     } 
    }, 
    function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      console.log("BODY: " + body); 
     } else { 
      console.log("ERROR: " + error); 
     } 
     } 
); 
+0

確定鏈接是正確的?你可以發送其他客戶的郵件請求嗎?您能否驗證該請求是在GCP上收到的? –

+1

您列出的錯誤是您看到的確切錯誤嗎?你記錄的錯誤全是大寫,但是你在文章中提到的錯誤是小寫。只是想知道錯誤是否來自您的POST請求或其他地方。 –

+0

@JasonAllshorn是的,它來自POST請求,只是修改了問題以消除潛在的混淆。 – TheProgrammer

沙发
0
0

不明確的,如果你有一個實際的HTTPS偵聽端口443(或指定端口上的另一端)。

我也想知道,如果您實際上可以使用帶有原始IP地址的HTTPS,因爲通常需要涉及到域+證書。

+0

不,現在沒有HTTPS服務器atm。但是我也允許在防火牆中使用HTTP流量?什麼不見??了 ? – TheProgrammer

+0

服務器通常在端口7076上監聽 – TheProgrammer

+0

您的保持活動設置如何?計算引擎是否啓動並能夠接收傳入的請求?這裏提到它。 https://cloud.google.com/compute/docs/troubleshooting#communicatewithinternet –

0
votes
answers
7 views
+10

在Mac OS Docker上運行REST應用程序時的空響應

0

我使用SBT創建了一個簡單的scala應用程序(akka-http REST服務)。在Mac OS Docker上運行REST應用程序時的空響應

這是應用程序的主類:

object UserApiWebService extends App { 

    override def main(args: Array[String]): Unit = { 

    implicit val system: ActorSystem = ActorSystem("user-api-system") 
    implicit val executionContext: ExecutionContext = system.dispatcher 
    implicit val materializer: ActorMaterializer = ActorMaterializer() 

    val userApiRoute = new UserApiRoute 
    val userApiRoutes = new UserApiRoutes(userApiRoute) 


    val config = ConfigFactory.load() 
    val host = config.getString("http.host") 
    val port = config.getInt("http.port") 

    println(s"Starting server on $host:$port..") 
    Http().bindAndHandle(userApiRoutes.routes, host, port) 
    println(s"Server started on $host:$port..") } 

} 

和我application.conf包含http.host = 「127.0.0.1」 和http.port = 9000

當我運行在本地運行sbt run所有作品的應用大。

所以我決定嘗試docker併爲我的Akka應用程序創建一個容器。 我使用sbt DockerPlugin並運行命令sbt docker:publishDocker它在本地機器上創建docker鏡像。

所以我用命令

docker run -p 9000:9000 --name user-api user-api:0.1.0-SNAPSHOT 

開始泊塢窗容器,我可以看到的是,容器運行正常。

如果我檢查API-REST應用程序工作正常使用命令:

curl -XGET 127.0.0.1:9000/user/34 

我得到curl: (52) Empty reply from server作爲響應。

如果我在使用docker exec -it a556b8846340 /bin/bash輸入容器後嘗試相同的命令,我會得到正確的響應。

我正在使用macOS 10.12.6和docker版本17.09.1-ce的mac上工作。

有人可以幫助我嗎?

沙发
0
1

由於您在Mac上運行,因此您需要docker-machine ip才能與本地VM (reference)交談。

所以,你需要捲曲配置泊塢窗機後進行更新,以curl -X GET http://$(docker-machine ip):9000/user/34

+0

作品也localhost上,由於 –

+0

@albertoadami聽起來不錯! – chenrui

0
votes
answers
7 views
+10

延遲廚師,直到一個資源完成其任務

0

我有一個廚師的食譜,帶來了一個mysql碼頭容器,然後,如果一些邏輯通過,連接到它加載一些數據庫條目。延遲廚師,直到一個資源完成其任務

問題是,它首次運行失敗,因爲它會繼續執行負責還原數據的資源,在mysql容器啓動並準備好接受連接之前。

下面是容器的帶來的食譜的一部分:

docker_container 'imhere-mysql' do 
    hostname mysqlHost 
    repo 'lutraman/imhere' 
    tag 'mysql' 
    env ["MYSQL_ROOT_PASSWORD=#{mysql_password}"] 
    volumes [ '/var/imhere/mysql:/var/lib/mysql' ] 
    action :run 
end 

這裏是做了部分的恢復:

remote_file "#{parent_data_dir}/#{db_restore_filename}" do 
    source "#{db_restore_url}/#{db_restore_filename}" 
    notifies :run, 'execute[mysql_load_dump]' 
end 

execute "mysql_load_dump" do 
    command "#{scripts_dir}/mysql_restore_dump.sh" 
    environment(
    'MYSQL_HOSTNAME' => mysqlHost, 
    'PARENT_DATA_DIR' => parent_data_dir, 
    'DB_RESTORE_FILENAME' => db_restore_filename, 
    'MYSQL_PASSWORD' => mysql_password, 
    'RETRIES' => "10" 
) 
    action :nothing 
end 

這是不太相關,但只是爲了完整性,這裏是腳本最終執行的內容:

MYSQL_IP_ADDRESS=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $MYSQL_HOSTNAME) 

gunzip -c $PARENT_DATA_DIR/$DB_RESTORE_FILENAME |  
mysql -h $MYSQL_IP_ADDRESS -D imhere -u root -p"$MYSQL_PASSWORD" 

正如你所看到的,我有點破解了p所以它會做幾次重試,但這隻會引入競爭條件。如何告訴廚師阻止docker_container資源,直到容器完全準備就緒?

沙发
0
2

資源已完成,問題在於docker run本身不是阻塞進程。您可能需要使用ruby_block資源和一些Ruby代碼來休眠,直到容器實際啓動並且服務器進程正在接受連接。

板凳
0
0

我不確定資源是否已完成coderanger說。

您是否嘗試通過兩種資源的轉儲操作? :

docker_container 'imhere-mysql' do 
    hostname mysqlHost 
    repo 'lutraman/imhere' 
    tag 'mysql' 
    env ["MYSQL_ROOT_PASSWORD=#{mysql_password}"] 
    volumes [ '/var/imhere/mysql:/var/lib/mysql' ] 
    notifies :run, 'execute[mysql_load_dump]', :delayed 
    action :run 
end 

remote_file "#{parent_data_dir}/#{db_restore_filename}" do 
    source "#{db_restore_url}/#{db_restore_filename}" 
    notifies :run, 'execute[mysql_load_dump]', :delayed 
end 

execute "mysql_load_dump" do 
    command "#{scripts_dir}/mysql_restore_dump.sh" 
    environment(
    'MYSQL_HOSTNAME' => mysqlHost, 
    'PARENT_DATA_DIR' => parent_data_dir, 
    'DB_RESTORE_FILENAME' => db_restore_filename, 
    'MYSQL_PASSWORD' => mysql_password, 
    'RETRIES' => "10" 
) 
    action :nothing 
end 
0
votes
answers
7 views
+10

設置永久碼頭工人建立我的環境

0

工作落後企業代理--build-ARG值 - 我需要建立我的搬運工相似圖片設置永久碼頭工人建立我的環境

docker build --build-arg http_proxy=http://my.proxy:80 .

這很好。

我有一個腳本,我已經檢查了一堆碼頭構建 - 這是失敗的,因爲它沒有到達代理。

有沒有辦法將我的本地環境設置爲在執行docker build時總是使用我的代理設置?

我確實看過創建一個別名 - 但是這似乎有點讓人厭煩,因爲這些命令之間有空格?是否有我可以修改的簡單全局配置?

沙发
0
0

首先,請確保按照HTTP/HTTPS proxy中所述配置docker deamon的http_proxy設置。

這個配置應該足以讓Docker在構建圖像時提取並使用它。但是,如果dockerfile運行的內部命令正在創建一些自定義連接,則可能無法正確拾取此配置。

的代理設置可以從碼頭工人的信息被拾起:

$ docker info | grep Proxy 
Http Proxy: http://localhost:3128 
Https Proxy: http://localhost:3128 

您可以使用提供由搬運工人信息拿起值。

但是,我建議安裝一個工具來將所有流量透明地路由到http代理。這樣你就可以忘記代理服務器,並且你的機器上的所有工具都應該可以毫無用處地工作。

如果你在linux上,有redsocks。如果您不想將其直接安裝在機器上,它也是一個docker image。對於其他平臺,您可以使用proxycap

+0

葉 - 這個回答沒有幫助。我的理解是,您爲docker設置的代理設置 - 不適用於在構建期間獲取npm或apt-get依賴關係的內容。請參閱:https://github.com/moby/moby/issues/24697 – dwjohnston

0
votes
answers
7 views
+10

Gradle:指定最終的spring-boot jar文件的正確方法是什麼?

0

我的春天啓動應用程序最初是使用Maven構建的,但是我想搖籃 - IFY它。我的構建過程的一部分是使用dockerfile-maven插件製作碼頭圖像。最接受的gradle等價物似乎是com.palantir.docker,所以這就是我正在使用的(至少根據this tutorial from pivotal。)Gradle:指定最終的spring-boot jar文件的正確方法是什麼?

我的設置非常簡單。我的dockerfile需要一個構建參數,這是最終的jar,並將其添加到圖像。

FROM openjdk:8-jdk-alpine 
MAINTAINER github.com/paul-nelson-baker 
EXPOSE 5005 8080 35729 
ENTRYPOINT ["java", "-Xdebug", "-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n", "-jar", "/var/paulbaker/pauls-blog.jar"] 
ARG JAR_FILE 
ADD ${JAR_FILE} "/var/paulbaker/pauls-blog.jar" 

讓我餓的部分是gradle setup。我通過構建ARG出現正確的:每當我試圖建立圖像

docker { 
    name = "paulbaker.io/my-blog" 
    tags 'latest' 
    dockerfile file('src/main/docker/Dockerfile') 
    files "${project.name}-${version}.jar" 
    buildArgs([JAR_FILE: "${project.name}-${version}.jar"]) 
} 

不過,我得到以下錯誤,即使實際Java構建成功:

$ gradle build docker 

> Task :docker FAILED 
ADD failed: stat /var/lib/docker/tmp/docker-builder952857277/pauls-blog-0.0.1-SNAPSHOT.jar: no such file or directory 

我已經嘗試了無數的組合試圖指定./build/libs/pauls-blog-0.0.1-SNAPSHOT.jar的路徑(相對於我的項目),我可以看到存在,而上面的打印目錄沒有。

顯然有一些我不認識的gradle左右建造,能有人清理如何得到最終的jar文件?

沙发
0
0

我已經解決了這個問題,但我不知道爲什麼,這是不同的,所以我要離開打開,有人有機會作出詳細的解釋,爲什麼這個工程的問題。

的正確值應該引用jar.archivePath。 所以最終結果如下所示:

docker { 
    name = "paulbaker.io/my-blog" 
    tags 'latest' 
    dockerfile file('src/main/docker/Dockerfile') 
    files jar.archivePath 
    buildArgs([JAR_FILE: "${jar.archiveName}"]) 
} 
0
votes
answers
7 views
+10

DISPLAY:0如果在每個碼頭集裝箱內運行Xvfb:0,則由多個碼頭集裝箱共享?

2

我需要在多個Docker容器中運行相同的一組進程,並且每個容器處理一個日誌。我需要屏蔽每個容器的結果。如果我在每個容器中運行Xvfb:0,它們是否都共享主機的Display:0或每個使用它自己的Display:0?如果我將每個容器中的ffmpeg運行到屏幕截圖顯示:0,它會得到它運行的當前容器的獨立視圖還是全局顯示:0?我的問題是如果這個顯示:0是共享的,如果Xvfb:0在每個容器內開始。DISPLAY:0如果在每個碼頭集裝箱內運行Xvfb:0,則由多個碼頭集裝箱共享?

沙发
0
0

TLDR;創建的顯示將不會被共享。

由於Xvfb正在創建一個新的虛擬幀緩衝區,它是在容器中使用的內存顯示實例中模擬的。

它們可以通過一個套接字文件進行訪問,該套接字文件可以(通常)在/tmp/.X11-unix/X99中找到,該套接字文件又是容器特有的。