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: 8

0
votes
answers
48 views
+10

無法進入到碼頭工人的容器中,kubernetes部署

0

隨着minikube我創建在kubernetes簡單的部署(https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment)創建。我確定容器必須運行,因爲kubernetes pod已成功啓動,並且我可以看到容器在Portainer中運行。 但我只是不能進入容器!無法進入到碼頭工人的容器中,kubernetes部署

(我總是可以用一個簡單的莢做,可能與部署不對勁)

$ docker exec -it 01a7c90b4267 /bin/bash 
rpc error: code = 2 desc = oci runtime error: exec failed: dial unix /tmp/pty870274210/pty.sock: connect: connection refused 

此外,我發現「錯誤同步莢」在容器中的日誌,但容器狀態運行

沙发
0
0

看來,問題是由安裝到minikubes'造成tmp文件夾minikube mount $TMP:/tmp。如果沒有安裝,我可以Exec的容器中的/斌/ bash中,沒有任何問題

板凳
0
1

bash在您的容器中不可用。你有沒有試過sh

$ docker exec -ti 01a7c90b4267 sh 

另外,如果你連接到內Kubernetes運行的容器,你可能想kubectl exec,而不是docker exec

$ kubectl exec -ti <pod_id> sh 
+0

我敢肯定,爲「/斌/慶典」爲「SH」必須在容器可用,因爲我知道使用的泊塢窗圖片,並在這個命令上檢查它們。 '$ kubectl EXEC -IT CB-部署-cdb9fdf5f-m6gv7 sh'也返回 'RPC錯誤:代碼= 2 DESC = OCI運行時錯誤:執行失敗:撥號UNIX /tmp/pty757863663/pty.sock:連接:連接被拒絕' – igor

0
votes
answers
52 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
54 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
72 views
+10

Docker-compose和nginx代理

1

我正在嘗試使用jwilder/nginx-proxy作爲我的angular2應用程序的反向代理,該應用程序被分解爲3個容器(角度,快速和數據庫)。Docker-compose和nginx代理

我已經嘗試了不同的配置,以代理請求,以我的應用程序上的端口80,但是當我嘗試運行搬運工,撰寫我得到:

ERROR: for angular Cannot start service angular: driver failed programming 
external connectivity on endpoint example_angular_1 
(335ce6d0c775b7837eb436fff97bbb56bfdcaece22d51049e1eb4bf5ce45553c): Bind for 
0.0.0.0:80 failed: port is already allocated 

雖然該消息是很清楚,上有衝突端口80,我找不到解決它的方法,當我將角容器設置爲在端口4200上工作時,它工作得很好,但是每次我想要訪問該頁面時都必須在URL中指定端口號。我現在用的是反向代理,因爲它是不是會在我的環境中運行的唯一的應用程序

下面是我泊塢窗,compose.yml

version: '3' 

services: 
    nginx-proxy: 
     image: jwilder/nginx-proxy 
     container_name: nginx-proxy 
     ports: - "80:80" 
     volumes: - /var/run/docker.sock:/tmp/docker.sock:ro 

    angular: 
     build: client 
     ports: - "80" 
     environment: 
      - VIRTUAL_HOST=example.com 
      - VIRTUAL_PORT=80 
     restart: always 

    express: 
     build: server 
     ports: - "3000:3000" 
     links: - database 
     restart: always 

    database: 
     image: mongo 
     ports: - "27017:27017" 
     restart: always 

networks: 
    default: 
    external: 
    name: nginx-proxy 

而且Dockerfile的角度容器

FROM node:8-alpine as builder 

COPY package.json package-lock.json ./ 

RUN npm set progress=false && npm config set depth 0 && npm cache clean --force 

RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app 

WORKDIR /ng-app 

COPY . . 

RUN $(npm bin)/ng build --prod --build-optimizer 

FROM nginx:1.13.3-alpine 

COPY nginx/default.conf /etc/nginx/conf.d/ 

RUN rm -rf /usr/share/nginx/html/* 

COPY --from=builder /ng-app/dist /usr/share/nginx/html 

CMD ["nginx", "-g", "daemon off;"] 

EXPOSE 80 
+0

爲什麼使用2個nginx?只需將角色nginx中的代理通行規則放在表達式中即可實現所需的全部功能。 – Stefano

+0

1是一個反向代理,第二個是承載angular2應用程序本身。 express容器是angular的後端,我希望儘可能使模塊儘可能模塊化,以便組件可以自行重用。我不想讓角容器知道其他應用程序,如果這是有道理的。 – DKMudrechenko

沙发
0
0

問題是,您試圖在主機上打開端口80兩次。一次用於nginx-proxy,一次用於角度。從角度移除「端口80」。

+0

我試過刪除***端口: - 「80」***之前的角度配置部分。 '''docker-compose'''啓動時沒有錯誤,但是我沒有看到關於啓動角容器的消息旁邊的綠色*** done ***,而且當我看到端口80上沒有任何東西在監聽時測試。 – DKMudrechenko

+0

這是因爲你在localhost上傳遞代理。嘗試在'angular:80'上設置代理傳遞,或者爲角形容器使用不同的端口。 – Stefano

板凳
0
0

如果你想使用nginx作爲反向代理,你需要使用80端口來訪問它。然後修改nginx配置重定向到角容器和端口(例如81)。試試這個:「proxy_pass http://angular:81」。這應該工作。

地板
0
1

瀏覽器將與您設置的虛擬端口上的容器對話。 也許你可以通過api端點將請求指向後端

0
votes
answers
37 views
+10

SQL異常只發生在三臺服務器中的一臺上

0

我們在使用Java編寫語句時遇到問題。唯一的例外似乎是很清楚的:SQL異常只發生在三臺服務器中的一臺上

Root Exception stack trace: com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(SQLServerStatement.java:1973) at org.apache.commons.dbcp.DelegatingStatement.getGeneratedKeys(DelegatingStatement.java:315)

它基本上說,我們正在努力已被執行之前讀取查詢結果。聽起來似乎合理。現在,這是造成這個異常的代碼如下:

... 

    preparedStatement.executeUpdate(); 

    ResultSet resultSet = preparedStatement.getGeneratedKeys(); 
    if(resultSet.next()) { 
     retval = resultSet.getLong(1); 
    } 

    ... 

正如你可以看到,我們獲取查詢結果後,我們執行的語句。

在這種情況下,我們嘗試從查詢的ResultSet中獲取生成的密鑰,我們只是成功執行了該查詢。

問題

我們運行在三個不同的服務器代碼(負載均衡,搬運工集裝箱)。奇怪的是,這個例外只有發生在第三個碼頭服務器上。其他兩個碼頭服務器有從來沒有遇到此異常。

額外:失敗的查詢每天執行約13000次。 (4500由服務器3處理)大多數情況下,查詢在服務器3也能正常工作。有時候,可以說每天20次,查詢失敗。總是相同的查詢,始終是同一臺服務器。從來沒有其他的服務器。

我們已經試過

  • 我們檢查了軟件版本。但是,這一切都是一樣的,因爲所有的服務器都在運行相同的docker鏡像。
  • 我們已更新到Java的最新Microsoft SQL驅動程序
  • 我們檢查了我們是否使用PreparedStatement.RETURN_GENERATED_KEYS參數構建了我們所有的PreparedStatements

看起來它是一些服務器配置相關的問題,因爲碼頭圖像都是一樣的。但我們找不到原因。有沒有人有什麼問題可以建議?還是有人曾經遇到過這個問題?

沙发
0
0

據我所知,SQL Server不支持批處理執行情況下的getGeneratedKeys()。

這裏是功能要求是尚未滿足:https://github.com/Microsoft/mssql-jdbc/issues/245

我的建議是,如果你由於某種原因,第三個服務器批量插入被contitiously執行,這可能會導致你所提到的例外(如果在另外兩個只有一個項目被插入)

你可以嘗試登錄sql語句來檢查這個

+0

感謝您的回答。我會嘗試一下你的建議,但並不能解釋爲什麼相同的代碼在一臺服務器上失敗,而不是在其他服務器上失敗。 – Harrie

0
votes
answers
55 views
+10

安裝一個本地目錄作爲容器的體積,從Dockerfile

0

我知道目錄如何本地可以安裝與在docker run-v期權交易量,即安裝一個本地目錄作爲容器的體積,從Dockerfile

docker run -v /local/some_folder:/container/some_folder image_name 

不過,我希望能夠指定上述指令(裝入本地/local/some_folder/container/some_folder在容器的Dockerfile內。


我使用試圖在Dockerfile,但似乎並沒有工作:我就能夠從使用docker exec -t container sh容器內訪問/container/some_folder,但集裝箱的到/container/some_folder寫的變化過程中容器的運行時間和docker stop container後不會反映在/local/some_folder

沙发
0
1

您無權控制Dockerfile或圖像構建過程中的主機卷裝入等事情。允許惡意圖像創建者在未經該主機管理員的許可的情況下製作一個映像,以便在主機上安裝目錄。安全漏洞允許流行的基礎映像安裝文件系統,可以用來將私人數據發送到異地並在無數臺機器上注入登錄證書。裝入卷的唯一方法是在運行時,在運行容器的管理員的明確請求下,以及它們提供的目錄。

+0

可以理解,謝謝。 – ning

0
votes
answers
50 views
+10

無法從碼頭集裝箱訪問互聯網

0

我試圖從碼頭集裝箱運行zotonic(使用zotonic/zotonic-dev)運行時發生此錯誤,似乎我無法連接到互聯網從容器。我試過在My docker container has no internet中使用解決方案,但似乎沒有任何工作,或者我正在跳過一些東西?無法從碼頭集裝箱訪問互聯網

我開始使用它docker-compose run --service-ports zotonic sh

Building Zotonic for the first time. 
EXOMETER_PACKAGES="-afunix -netlink -exo +setup" && ./rebar -C rebar.config.lock get-deps 
WARN: Missing plugins: [rebar_lock_deps_plugin] 
==> zotonic (get-deps) 
Pulling goldrush from {git,"git://github.com/DeadZen/goldrush.git", 
          "71e63212f12c25827e0c1b4198d37d5d018a7fec"} 
Cloning into 'goldrush'... 
fatal: Unable to look up github.com (port 9418) (Try again) 
ERROR: sh(git clone -n git://github.com/DeadZen/goldrush.git goldrush) 
failed with return code 128 and the following output: 
Cloning into 'goldrush'... 
fatal: Unable to look up github.com (port 9418) (Try again) 

ERROR: 'get-deps' failed while processing /opt/zotonic: rebar_abort 
make: *** [GNUmakefile:40: get-deps] Error 1 
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [kernel-poll:true] 
+0

您使用了哪一個碼頭圖像,並且可以在帖子中準確地添加如何啓動它?是zotonic/zotonic還是別的?另外,你知道你可以連接到容器並從裏面調試,包括安裝缺少的東西嗎?命令是:docker exec -it「你的容器的ID」bash –

+0

你在代理服務器後面運行嗎? – yamenk

+0

@ isp-zax我正在使用zotonic/zotonic-dev並使用'docker-compose run --service-ports zotonic sh'運行它。 @yamenk不,我沒有使用任何代理 –

沙发
0
0

重新啓動時碼頭工人不工作,我解決它通過reinstalling docker using curl像@ ISP-ZAX說。

0
votes
answers
39 views
+10

docker per process routing

0

我有一個Docker容器,運行兩個進程(比如process_a和process_b)。docker per process routing

我希望將來自process_a的數據包路由到GW1,並將來自process_b的數據包路由到GW2。

有沒有人成功實現了這個?

我已閱讀並使用cgroups文章在https://www.evolware.org/?p=369上實施了每個進程路由。 它適用於物理主機上的進程。它不適用於在Docker容器內運行的進程。更詳細的解釋是在https://github.com/moby/moby/issues/19802https://lists.linuxfoundation.org/pipermail/containers/2014-January/033848.html

任何指針將非常感激。

感謝,

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎是無關緊要的。請參閱幫助中心內的[我可以詢問哪些主題](https://stackoverflow.com/help/on-topic)。也許[Unix和Linux堆棧交換](https://unix.stackexchange.com)或[服務器故障](https://serverfault.com)將是一個更好的地方問高級Linux路由。 – Matt

沙发
0
0

個人,而不是有2個工序在同一容器中運行,我會開始運行的具體流程相同容器的兩個實例,並設置爲單實例的路線,而不是鍛鍊的容器內部有些魔力。

0
votes
answers
51 views
+10

如何更改與docker一起使用時的nginx端口

0

我是碼頭初學者,我做的第一件事是下載nginx並試圖將其掛載到80:80端口,但Apache已經坐在那裏。如何更改與docker一起使用時的nginx端口

docker container run --publish 80:80 nginx 

docker container run --publish 3000:3000 nginx

我試圖做這樣的3000:3000使用它在端口3000,但它不能正常工作。而且它不記錄任何東西,我可以使用全球化志願服務青年。

沙发
0
5

當您開始使用Docker時,您可能會在DockerHub上找到有關圖像的有用信息。例如用nginx你有一段關於如何去expose public ports

你可以使用:在你的本地主機

docker run --publish 3000:80 nginx 

3000端口將被轉發到端口80是nginx的圖像使用等待HTTP連接的端口。

我也推薦你閱讀這個官方文檔about networking in Docker

0
votes
answers
44 views
+10

從Heroku的Docker容器中訪問X-Server

0

我將一箇舊的.NET Web API應用程序移植到Docker容器中的Heroku上運行。我正在使用單色圖像。從Heroku的Docker容器中訪問X-Server

這裏是我的Dockerfile:

FROM mono:latest 
EXPOSE 5000 
ENV PORT 5000 
ADD ./ /api 
WORKDIR /api 
RUN nuget restore -NonInteractive 
RUN msbuild webapi.sln /p:Configuration=Release 
CMD mono /api/MyProject/bin/Release/MyProject.exe port:$PORT 

非常簡單,採用最新的立體圖像,複製源,恢復的NuGet軟件包,構建解決方案,並運行它。 $ PORT環境變量由Heroku設置,或者我的本地開發環境默認爲5000。

這一切都很好,除了一個特定的API控制器生成PDF報告。該報告由PdfSharp生成,它依賴於System.Drawing程序集以進行必要的渲染。但是這意味着依賴於顯示。

當我調用該控制器生成報告時,出現以下錯誤。

Could not open display (X-Server required. Check your DISPLAY environment variable). 

我需要訪問X-Server才能進行必要的渲染。我嘗試了很多東西,但總是堅持這個錯誤。

沙发
0
0

通過安裝Xvfb(虛擬幀緩衝區),一個實現X11顯示服務器協議的顯示服務器,得到它的工作。你可以看看下面更新的Dockerfile。

備註:除了顯示服務器之外,還有更多使PDFSharp在Mono上運行的問題。我還必須更新apt源並安裝Microsoft Core Fonts,因爲我生成的報告使用它們。 我也必須使用知道如何定位字體的PDFSharp的修改版本。幸運的是,這已經爲我做的:

https://github.com/daniellor/PDFsharp

相關的代碼是在這裏:

https://github.com/daniellor/PDFsharp/blob/master/src/PdfSharp/Fonts/FontLocalizator.cs

有點哈克,你可能需要修改,以滿足您的設置,但它確實工作。只需創建一個MonoRelease版本並引用該程序集,就可以開始使用了。

Dockerfile

FROM mono:latest 

# Update the sources.list for apt-get so it knows where to download the Microsoft Core fonts. 
RUN echo "deb http://gce_debian_mirror.storage.googleapis.com wheezy contrib non-free" >> /etc/apt/sources.list  
    && echo "deb http://gce_debian_mirror.storage.googleapis.com wheezy-updates contrib non-free" >> /etc/apt/sources.list  
    && echo "deb http://security.debian.org/ wheezy/updates contrib non-free" >> /etc/apt/sources.list 

# Install Xvfb and the Microsoft core fonts 
RUN apt-get update 
RUN apt-get install -y xvfb ttf-mscorefonts-installer 

# Configure Xvfb as a daemon. 
ADD xvfb.init /etc/init.d/xvfb 
RUN chmod +x /etc/init.d/xvfb 
RUN update-rc.d xvfb defaults 

EXPOSE 5000 
ENV PORT 5000 
ADD ./ /api 
WORKDIR /api 
RUN nuget restore -NonInteractive 
RUN msbuild webapi.sln /p:Configuration=Release 

# Start Xvfb and the Web Api 
CMD (service xvfb start; export DISPLAY=:10; mono /api/MyProject/bin/Release/MyProject.exe port:$PORT) 

xvfb.init

#!/bin/bash 
# 
# /etc/rc.d/init.d/xvfbd 
# 
# chkconfig: 345 95 28 
# description: Starts/Stops X Virtual Framebuffer server 
# processname: Xvfb 
# 

[ "${NETWORKING}" = "no" ] && exit 0 

PROG="/usr/bin/Xvfb" 
PROG_OPTIONS=":10 -ac" 
PROG_OUTPUT="/tmp/Xvfb.out" 

case "$1" in 
    start) 
     echo -n "Starting : X Virtual Frame Buffer " 
     $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 & 
     disown -ar 
     ;; 
    stop) 
     echo -n "Shutting down : X Virtual Frame Buffer" 
     killproc $PROG 
     RETVAL=$? 
     [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb/var/run/Xvfb.pid 
     echo 
     ;; 
    restart|reload) 
     $0 stop 
     $0 start 
     RETVAL=$? 
     ;; 
    status) 
     status Xvfb 
     RETVAL=$? 
     ;; 
    *) 
    echo $"Usage: $0 (start|stop|restart|reload|status)" 
    exit 1 
esac 

exit $RETVAL