英文:
How to use the MySQL server running on my local machine inside the docker container for a DropWizard application?
问题
driverClass: com.mysql.cj.jdbc.Driver
user: root
password:
url: jdbc:mysql://localhost:3306/locations?useLegacyDatetimeCode=false&serverTimezone=UTC
properties:
charSet: UTF-8
maxWaitForConnection: 1s
validationQuery: "/* MyService Health Check */ SELECT 1"
validationQueryTimeout: 3s
minSize: 8
maxSize: 32
checkConnectionWhileIdle: false
evictionInterval: 10s
minIdleTime: 1 minute
英文:
I'm new to Docker and am currently struggling with containerizing my dropwizard application. Each time I build the container, run it, and check the logs, I get the MySQL connection failure error which makes sense as the container runs on a virtual machine and for it the localhost URL means nothing. I was wondering what can I do to make my MySQL accessible inside my docker container. Thanks. This is how my config.yml file looks like rn.
driverClass: com.mysql.cj.jdbc.Driver
# the username
user: root
# the password
password:
# the JDBC URL
url: jdbc:mysql://localhost:3306/locations?useLegacyDatetimeCode=false&serverTimezone=UTC
# any properties specific to your JDBC driver:
properties:
charSet: UTF-8
# the maximum amount of time to wait on an empty pool before throwing an exception
maxWaitForConnection: 1s
# the SQL query to run when validating a connection's liveness
validationQuery: "/* MyService Health Check */ SELECT 1"
# the timeout before a connection validation queries fail
validationQueryTimeout: 3s
# the minimum number of connections to keep open
minSize: 8
# the maximum number of connections to keep open
maxSize: 32
# whether or not idle connections should be validated
checkConnectionWhileIdle: false
# the amount of time to sleep between runs of the idle connection validation, abandoned cleaner and idle pool resizing
evictionInterval: 10s
# the minimum amount of time an connection must sit idle in the pool before it is eligible for eviction
minIdleTime: 1 minute
# Logging settings.
#logging:
# level: INFO
# loggers:
# io.dropwizard: DEBUG
# org.eclipse.jetty.servlets: DEBUG
# org.hibernate.SQL: ALL
# com.udemy.LocationsApplication:
# level: ALL,
# additive: false
# appenders:
# - type: conso
# logFormat: "%red(CDR) [%magenta(%date)] [%thread] [%cyan(%logger{0})]: %message%n"
# appenders:
# - type: console
# logFormat: "%highlight(%-5level) [%magenta(%date)] [%thread] [%cyan(%logger{0})]: %message%n" ```
</details>
# 答案1
**得分**: 0
假设您有一个暴露端口为 `3306` 的 MySQL 容器和一个 Dropwizard 容器。
您可以为它们创建一个网络:
```shell
docker network create <network_name>
然后将其分配给这些容器:
docker run .... --network <network_name>
这样应该使这两个容器能够相互通信。
您可以使用 docker network ls
命令查看您拥有的网络。如果您使用 docker-compose
,它会自动生成网络。
您还可以使用 host
网络,这也使它们能够连接到您机器上的端口(如果您在其中之一运行 Docker,则是虚拟机)。
英文:
Assuming you have a mysql container exposing the port 3306
and your dropwizard container.
You can create a network for them
docker network create <network_name>
And assign it to the dockers
docker run .... --network <network_name>
This should make that bot dockers see each other
You can see the networks you have using docker network ls
if you use docker-compose
it will generate the networks automatically.
You can also use the host
network which also makes them able to connect to ports in your machine (the virtual machine if you are running docker in one of those)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论